AWSRails apach + passenger 環境 忘備録

passengerのモジュールをインストール

  496  sudo yum install lobcurl-devel
  497  sudo yum install httpd-devel
  498  sudo yum install apr-devel
  499  sudo yum install apr-util-devel

rbenvだと rehash しないとgemが反映されない 大切

これらすべての問題は,railsのbundlerにgemを追加したことが原因と推定 理由 グローバルにpassenger の gemが入っていないため、/home以下フォルダにて でアパッチのビルドができない。

sudo passenger-install-apache2-module

これはrubyのgemがapachを動かすmodule

ここが非常に参考になる

Apache上でRuby on Railsアプリケーションを動かす/Passenger(mod_rails for Apache)の利用 — Redmine.JP

再度ログインするとyumをupdateしろと

以下のパッケージが新たにインストールされた。

Installing:
 kernel            x86_64    4.14.97-74.72.amzn1      amzn-updates     21 M
 kernel-devel      x86_64    4.14.97-74.72.amzn1      amzn-updates     14 M
Updating:
 curl              x86_64    7.61.1-7.91.amzn1        amzn-updates    362 k
 kernel-headers    x86_64    4.14.97-74.72.amzn1      amzn-updates    1.2 M
 kernel-tools      x86_64    4.14.97-74.72.amzn1      amzn-updates    127 k
 libcurl           x86_64    7.61.1-7.91.amzn1   
bundle install
$ rbenv rehash

/home/hogehoge-user

$ gem install passenger
Building native extensions.  This could take a while...
Successfully installed passenger-6.0.1
Parsing documentation for passenger-6.0.1
Installing ri documentation for passenger-6.0.1
Done installing documentation for passenger after 51 seconds
1 gem installed

再度試みる

$ cd /home/ec2-user/
$ passenger-install-apache2-module

するとメモリが足りないという

Your system does not have a lot of virtual memory

Compiling Phusion Passenger works best when you have at least 1024 MB of virtual
memory. However your system only has 985 MB of total virtual memory (985 MB
RAM, 0 MB swap). It is recommended that you temporarily add more swap space
before proceeding. You can do it as follows:

  sudo dd if=/dev/zero of=/swap bs=1M count=1024
  sudo mkswap /swap
  sudo swapon /swap

See also https://wiki.archlinux.org/index.php/Swap for more information about
the swap file on Linux.

If you cannot activate a swap file (e.g. because you're on OpenVZ, or if you
don't have root privileges) then you should install Phusion Passenger through
DEB/RPM packages. For more information, please refer to our installation
documentation:

ttps://www.phusionpassenger.com/library/install/apache/

Press Ctrl-C to abort this installer (recommended).

スワップメモリ領域を変更する。

sudo dd if=/dev/zero of=/swap bs=1M count=2048
//512の単位、ここは思い切って2048にした。
  sudo mkswap /swap
  sudo swapon /swap

今度はうまく行った。

これをapachに設定してくださいと

  LoadModule passenger_module /home/ec2-user/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/passenger-6.0.1/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /home/ec2-user/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/passenger-6.0.1
     PassengerDefaultRuby /home/ec2-user/.rbenv/versions/2.4.1/bin/ruby
   </IfModule>

詳細はこのサイトをみてねと言われる。

Deploying an application - Apache - Passenger Library

以下を実行

これはpassengerが使うrubyとrailsが使うrubyが同じかどうかチェックするコマンド

passenger-config about ruby-command

rubyが使うのもapachが使うのも同じ 問題ない

$ passenger-config about ruby-command
passenger-config was invoked through the following Ruby interpreter:
  Command: /home/ec2-user/.rbenv/versions/2.4.1/bin/ruby
  Version: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
  To use in Apache: PassengerRuby /home/ec2-user/.rbenv/versions/2.4.1/bin/ruby
  To use in Nginx : passenger_ruby /home/ec2-user/.rbenv/versions/2.4.1/bin/ruby
  To use with Standalone: /home/ec2-user/.rbenv/versions/2.4.1/bin/ruby /home/ec2-user/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/passenger-6.0.1/bin/passenger start

アパッチ設定ファイル

$ sudo vi /etc/httpd/conf/httpd.conf

設定内容

<VirtualHost *:80>
    ServerAdmin localhost
    DocumentRoot /var/www/html/hogehoge
    PassengerRuby /home/ec2-user/.rbenv/versions/2.4.1/bin/ruby
    
    <Directory /var/www/html/hogehoge/public>
      Allow from all
      Options -MultiViews
    </Directroy>
</VirtualHost>

アパッチの再起動

$ sudo service httpd restart

Rails スクレイピング 忘備録

まずRubyでできるか確認。

それからRailsに組み込む 必要なライブラリ

require 'open-uri'
require 'nokogiri'

今回はタイ語のサイトから記事を取得

ข่าวหน้า 1 หนังสือพิมพ์ไทยรัฐ - หนังสือพิมพ์ ไทยรัฐฉบับวันนี้ อ่านข่าวหน้า 1 หนังสือพิมพ์ไทยรัฐ - thairath.co.th

# スクレイピング先のURL
url = 'https://www.thairath.co.th/newspaper'

charset = nil
html = open(url) do |f|
  charset = f.charset # 文字種別を取得
  f.read # htmlを読み込んで変数htmlに渡す
end

# htmlをパース(解析)してオブジェクトを作成
doc = Nokogiri::HTML.parse(html, nil, charset)

なぜこれでパースできるのかと言うと

作成途中です

doc.xpath('//li[@class="mdTopMTMList01Item"]').each do |node|
  # tilte
  p node.css('h3').inner_text

  # 記事のサムネイル画像
  p node.css('img').attribute('src').value

  # 記事のサムネイル画像
  p node.css('a').attribute('href').value
end

参考サイト

Nokogiriを使ったRubyスクレイピング [初心者向けチュートリアル] | 酒と涙とRubyとRailsと

Rails Mysql DBサーバ WEBサーバーから接続

se##前提として、DBサーバーとWEBサーバーがある

DBサーバー =>mysqlでリモートの接続を許可する

mysqld.cnfファイルに設定する。 ところがこれがくせ者で、たくさんある。 それでどれが優先されるか知る必要がある。環境により当然違う。

mysql --help | grep my.cnf
//この行は表示されるが無視  order of preference, my.cnf, $MYSQL_TCP_PORT,

//ここの左から優先して読み込まれる
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf 

よってetc/my.cnf を編集する。

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
bind-address= ここがDBサーバーのIP 

これでWEBサーバーから下記コマンドで疎通確認ができる。

mysql -h IPアドレス -u user名 -p

しかし、このユーザーをDBサーバーのIPを指定して作成しておかないといけない。 よって

DBサーバーでuserを作成

ユーザ作成

create user {user名}@WEBサーバーの内向きIPアドレス identified by {パスワード};

権限設定

grant all on DB名.* to {user名}@WEBサーバーの内向きIPアドレス identified by {パスワード上記と同じ};

DB名の後の .* はすべてのテーブルの意味

間違ってuser作成したときのuserの削除方法

drop user 'user'@'IP アドレス';

//userの表示
mysql> select user ,host from mysql.user
    -> ;
+---------------+----------------+
| user          | host           |
+---------------+----------------+
| rails_user    | 10.0.21.216    |
| rails_user    | 54.199.164.155 |
| mysql.session | localhost      |
| mysql.sys     | localhost      |
| root          | localhost      |
+---------------+----------------+

secret_key_baseの作成

rails>configフォルダに移動して secrets.yml ファイルを新規作成

$ bundle exec rails secret

RailsにてDB作成

rails db:create RAILS_ENV=production

PHP MAMP PATH設定 Auth インストール 忘備録

所定の場所で

/Applications/MAMP/bin/php/php7.2.8/bin

ここでエラー

./pear install -a Auth MDB2 MDB2#Mysqli


//==
No releases available for package "pear.php.net/Auth"

参考サイト

【MAMP】PHPのPath設定【Sierra/PHP7/.bash_profile】

これは最後にわかったのですが、今現在pearのサーバーがダウンしていることによります。 ただ、 MACに入っているPHPとMAMPのPHP違うものを利用していると, MAMP環境で、PHPが利用できません。

MAMPのPHPにPATHを通す必要がある。

パスはhomeディレクトリの.bash_profile に記載する。

確かめる方法

php -v

このバージョンがMAMPのバージョンと違っていたら、それはMACに入っているPHP

which php

これをMAMPのPATHに設定する。

//ホームディレクトリに移動
$ cd

$ ls -la

.bash_profile があるはず

それにパスを設定します

php7.2.8は各自のバージョンに合わせてくださいね。

export PATH=/Applications/MAMP/bin/php/php7.2.8/bin:$PATH

それからpearをインストールしようとすると、なんと、サーバーダウン


f:id:happy_teeth_ago:20190130134109p:plain

回復次第pearをインストールしようと思います。

mysql Riails 設定関係 忘備録

$ mysql -u root -p

これでmysqlに入る

別サーバーからの接続を許可する

mysql> grant all privileges on DB名.* to 'user名'@'接続元サーバーのIPアドレス' identified by 'パスワード' with grant option;

参考サイト

qiita.com

どれを利用するのか

use 利用するDB名;

mysql57-libs.x86_64

yum installの際、libraryを入れないとgccとかもインストールされないので大変大切!

ソケットファイルはここ webサーバー

/var/lib/mysql/mysql.sock

Rails migrate エラー

環境変数を確認 printenv コマンドを利用する

(master) $ printenv | grep DBUSER

//==
PROMPT_COMMAND=history -a;
NVM_IOJS_ORG_MIRROR=https://iojs.org/dist
PORT=8080
install_flag=1
IP=127.0.0.1
C9_HOSTNAME=13.115.129.196
RUBY_VERSION=ruby-2.6.2
rvm_user_install_flag=1
LESS_TERMCAP_se=

database.yml の値がセットされていない

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <%= ENV['DB_USERNAME'] %>
  password: <%= ENV['DB_PASSWORD'] %>
  socket: /var/lib/mysql/mysql.sock

bash_profileを編集

= はくっつけておかないといけない。

export DB_USERNAME=dbuser
export DB_PASSWORD=password

設定を反映する。

$ source ~/.bash_profile

ユーザー登録エラー

dbuserが2人いたので登録できない。
ちなみに%はどこからでも接続可能。
railsはlocalhostを利用するので、 dbuser%を削除する。

mysql> select Host, User, Password from mysql.user;
+------------------+--------+-------------------------------------------+
| Host             | User   | Password                                  |
+------------------+--------+-------------------------------------------+
| localhost        | root   |                                           |
| ip-172-31-40-136 | root   |                                           |
| 127.0.0.1        | root   |                                           |
| ::1              | root   |                                           |
| localhost        |        |                                           |
| ip-172-31-40-136 |        |                                           |
| localhost        | dbuser |                                           |
| %                | dbuser | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
+------------------+--------+-------------------------------------------+

パスワードの設定はpssword関数を利用すること ハッシュにしないと駄目のよう
41桁の16進数にしなさいと言われる

mysql> set password for dbuser ='password';
ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number

ココを参照して dev.mysql.com

//これで良い @の前後も' 'で囲むこと!
SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('cleartext password');

userを削除

@の前後をで囲むのを忘れないこと!

mysql> drop user 'dbuser'@'%';

//==
Query OK, 0 rows affected (0.00 sec)

確認すると成功

mysql> select Host, User, Password from mysql.user;
+------------------+--------+-------------------------------------------+
| Host             | User   | Password                                  |
+------------------+--------+-------------------------------------------+
| localhost        | root   |                                           |
| ip-172-31-40-136 | root   |                                           |
| 127.0.0.1        | root   |                                           |
| ::1              | root   |                                           |
| localhost        |        |                                           |
| ip-172-31-40-136 |        |                                           |
| localhost        | dbuser | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
+------------------+--------+-------------------------------------------+
7 rows in set (0.00 sec)

パスワードも設定されている。