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 seedファイル書き方 忘備録
seed file
Client.create([ {name: :yokohama,address: "東京都新宿区"}, {name: :tarou ,address: "新潟県"} ])
rails db:seed
Rails スクレイピング 忘備録
まずRubyでできるか確認。
それからRailsに組み込む 必要なライブラリ
require 'open-uri' require 'nokogiri'
今回はタイ語のサイトから記事を取得
# スクレイピング先の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
参考サイト
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をインストールしようとすると、なんと、サーバーダウン
回復次第pearをインストールしようと思います。
mysql Riails 設定関係 忘備録
$ mysql -u root -p
これでmysqlに入る
別サーバーからの接続を許可する
mysql> grant all privileges on DB名.* to 'user名'@'接続元サーバーのIPアドレス' identified by 'パスワード' with grant option;
参考サイト
どれを利用するのか
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)
パスワードも設定されている。
SCP つまりどころ 忘備録
scpコマンドのつまりどころ これだけ。
scp -i [コピー元秘密鍵名] [コピー先秘密鍵名] ec2-user@[アドレス]:[サーバー上の場所]