近況報告
私の大好きなアーティスト,ポルノグラフィティのボーカル,岡野昭仁がyoutuberデビューして一ヶ月。最新の投稿ではLiSAのカバーしてて界隈では大盛り上がりでした。界隈 #とは
何がすごいって,カバーなのに岡野昭仁の曲と化すんですよ。圧倒的な経験実力声量があるからこそですよね。プログラミングも先人たちの知恵をコピーしたり応用したりフル活動して自分たちの作品を作り上げていくのだから負けては要られません!
今回の目標
・インフラ整備での各アクションの言語化
・コードを単に打っているだけでは理解しきれないし,他に応用できないので言語化して整理
・テックキャンプ受講生支援
## おおまかな流れ
・本番環境でrailsを起動させる。
・アセットファイルのコンパイル
##事前準備
vol.1
vol.2
vol.3
vol.4
本番環境でrailsを起動させる。
vol.4まででrailsの準備はできました。この時点でローカル環境でいう「rails db:create」はまだ行なっていませんが,カリキュラムに沿って見ていくので少々お待ちを。
$ cd /var/www/[自分のリポジトリ]
$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D
master failed to start, check stderr log for details
・bundle execはgemfile.lockにあるものをrequireするためのコマンド⇨参考
・-c config/unicorn.rb は設定ファイルの指定
・-E production は環境を「本番モードとして動作させる」
・-Dは「Daemon(デーモン)」の略で、プログラムを起動させつつターミナルで別のコマンドを打てるようにするオプション。つまり,ターミナルは打てる状態だけどしっかり裏で動いているよーって感じ。
そしてこんな感じでエラーが発生します。logを見ろだって。エラーを確認しましょう。
$ less log/unicorn.stderr.log
I, [2016-12-21T04:01:19.135154 #18813] INFO -- : Refreshing Gem list
I, [2016-12-21T04:01:20.732521 #18813] INFO -- : listening on addr=0.0.0.0:3000 fd=10
E, [2016-12-21T04:01:20.734067 #18813] ERROR -- : Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
/home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/mysql2_adapter.rb:29:in `rescue in mysql2_connection'
〜省略〜
lessはLinuxにおいてファイルの閲覧に用いられます。開発環境のエラーログはrailsのlogファイルを見ればいいのですが,本番環境はvsコードみたいに見れない(多分)ので,logファイル中のunicornを指定してstderr(エラーの出力をした).logを確認します。
ここで重要なのは
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
MySQLが繋がってないよー
そりゃあDB作成してないしね笑
やることは2つ
・DB:create
$ rails db:create RAILS_ENV=production
Created database '<データベース名>'
$ rails db:migrate RAILS_ENV=production
もしMySQLが止まっていたら,sudo service mysqld startを実行。
・railsの本番環境でのデータの保存先を指定
production:
<<: *default
database: ~~~(それぞれのアプリケーション名によって異なっています。こちらは編集しないでください)
username: root
password: <%= ENV['DATABASE_PASSWORD'] %>
socket: /var/lib/mysql/mysql.sock
必要な部分を編集。socketはEC2のルートディレクトリを調べるとそこに存在しています。
補足 本番環境のディレクトリについて
記述が終わったらpushして,EC2上に持って来ましょう
git pull origin master
ではもう一度ユニコーンを実行してみる
$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D
エラー表示が出なければ成功(デーモンなのでターミナルに実行状態が表示されない)
###アセットファイルのコンパイル
assetfile conpileって書くとわかりやすいかな?conpileわからない?知らん!
現状CSSとかJS,画像のファイルが毎度読み込まれない状態なのでそれをどうにかしていきます。
rails assets:precompile RAILS_ENV=production
著者はこんなエラーに遭遇
Sass::SyntaxError: File to import not found or unreadable: textbox/textConcept.
今までデプロイ作業して来た中でも初見さんでした。
これはsassファイルのimportに失敗したということは,textbox以下のファイルは関係なし,asset/apprication.scssに問題があると判断。結果,アルファベットの大文字小文字のミスでしたー泣
修正して再度実行。エラーなく成功!
アセットファイルを反映させるためにUnicornを再起動します。
$ ps aux | grep unicorn
ec2-user 14500 0.0 16.2 436632 100000 ? Sl 11:25 0:01 unicorn_rails master -c config/unicorn.rb -E production -D
ec2-user 14505 0.0 4.3 4536632 99999 ? Sl 11:25 0:00 unicorn_rails worker[0] -c config/unicorn.rb -E production -D
ec2-user 15452 0.0 0.2 555555 5555 pts/2 S+ 13:03 0:00 grep --color=auto unicorn
Unicornを止めるにはMasterの停止が必要なので,killコマンドを用いて停止します
$ kill 14500(Unicornのマスターの一番左にある数列を入力してください。⬆︎のでは14500)
$ ps aux | grep unicorn ⇨本当に止まったか確認
ec2-user 15452 0.0 0.2 555555 5555 pts/2 S+ 13:03 0:00 grep --color=auto unicorn
$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D
⇨Unicorn再起動
最後のコマンドRAILS_SERVE_STATIC_FILES=1 はコンパイルされたアセットファイルを見つけるための記述だそう。。でも気になります。RAILS_SERVE_STATIC_FILESって何でしょう。大文字での記述に身に覚えがある記述してませんか?そうです。環境変数としてアセットファイルは呼び出されているのです。1に関しては設定できていれば何でもいいのだそう。
補足
$tail -f log/production.log
を用いると、アプリケーションにアクセスがあった場合にリアルタイムにログが流れることが確認できます
##おわりに
rails起動できたー!!!(デプロイ3回目)
あとはNginxの搭載ですね〜
微量でも参考になったらLGTM,ご指導はコメント欄にお願いします!