Railsをproduction環境で動かす時のメモ
注意:この記事はメモなので、この記事に書いてあることをやっただけでは同じものができません。(大体の雰囲気は書いてあると思います。)
注意:全くのweb開発初心者なので、間違っているところなどがあるかと思いますが、教えていただけると嬉しいです。
基本的にはググって出てくる方法と同じようにやっていますが、書いてなかったことを順次追加していきます
ssl接続ができるようになるまでに必要なこと
SSL証明書を発行する
ネコでもわかる!さくらのVPS講座 ~第六回「無料SSL証明書 Let’s Encryptを導入しよう」 | さくらのナレッジ
サーバをSSL化する Let's Encryptを利用してApache 2.4サーバをHTTPS化する - Qiita
Rails,HTTP parse error, malformed requestの対処 - bokunonikki.net
など
- config/puma.rbに正しいkeyとcertを記入したのに、bundle exec pumactl start -e productionすると'No such key file'と言われる
アクセス権限がないフォルダにkeyとcertが存在している場合があります。(特にcertbotで作った時とか) sudoで実行してみて動いたら、ファイルの権限を変更するとか、ファイルを移動するなどすれば解決できます。
railsアプリが動くようになるまでに必要なこと
[Rails]production環境で動かす - Qiita
- log/production.logを見るとアセットパイプラインが読み込まれていない アセットパイプラインをプリコンパイルする必要があります。
bundle exec rake assets:precompile RAILS_ENV=production
- postgreSQLの設定
ruby-on-rails - 環境変数を使用してpostgresqlのユーザ名とパスワードをdatabase.ymlでハードコーディングすることを避けるには?
postgresql.confの場所は/var/lib/pgsql/data/postgresql.conf
bundle exec rake db:create RAILS_ENV=production bundle exec rails db:environment:set RAILS_ENV=production bundle exec rake db:migrate:reset RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 rails db:seed RAILS_ENV=production
するとpostgresでデータベースが設定できる。
bundle exec pumactl start -e production
これでメールを送る前までは動く。 メールを送るには Rails の ActionMailer でメール送信処理 - Qiita パスワードというのはグーグルが発行する12桁のアプリパスワードのことで、作成には二段階認証を登録する必要がある。
これでメールが届くようになった。 アクティベーションのホスト名が違う
config/production.rb
config.action_mailer.perform_caching = false config.action_mailer.delivery_method = :smtp host = 'naomiatlibrary.com' config.action_mailer.default_url_options = { host: host } ActionMailer::Base.smtp_settings = { address: 'smtp.gmail.com', domain: 'gmail.com', port: 587, user_name: 'gmail account', password: 'password', authentication: 'plain', enable_starttls_auto: true }
これで正しいアドレスを記載したメールが届くようになったが、アドレスにアクセスしてもアクティベーションされず、
The requested URL /account_activations/---/edit was not found on this server.
になる。 これはhost = 'naomiatlibrary.com:9292'にするべきだった。
bootstrapやfullcalender.ioが働いてない
こんな感じ。 これを治すには
RailsアプリでCSSの変更が反映されない時の対処【アセットパイプライン】 - Qiita これで解決
カレンダーがうまく表示されない
yarn add @fullcalendar/core @fullcalendar/daygrid @fullcalendar/list @fullcalendar/timegrid
してもダメだ…
→config/webpacker.ymlのextractcss:trueをfalseにした naomi-notebook.hatenablog.com
してもダメだ…もういっかい
bundle exec rake assets:precompile RAILS_ENV=production
したらできた!!
というわけでデプロイできました。
困ったこと
sudoをつけてbundle exec pumactl start -e productionしないとSSL routines:tls_post_process_client_hello:no shared cipherというエラーが出ます。SSL証明書の権限をchmodで変更したりSELinuxを無効化してみたりと色々したのですが、ついに直すのは無理でした。sudoで実行するのはあまり良くないと思うので避けたいのですが…(どうすればいいのだろうか) →できた
こんなのも見つけた(参考まで)
VPSでRailsアプリを動かすまでの全手順【Rails6, Capistrano, Puma, Nginx, MySQL, HTTPS】 - Qiita
自分用メモ herokuにpushするものとの変更点 * config/environments/production.rbのhostを変える * config/puma.rbに鍵を追加する