LoginSignup
0
0

More than 1 year has passed since last update.

Ruby on Rails テスト環境を本番環境にしてみた

Posted at

記事の背景

Ruby on Rails本番環境で再現していたバグをテスト環境で確認する為、テスト環境を本番環境に変更してバグ修正を試みようと思ったが、テスト環境を本番環境にするのにかなり詰まった為、記事を書いてみました。

まず、環境を変えるとはどういうことか??

テスト環境では環境変数testで実行していたものをproductionに変える(RAILS_ENV=testRAILS_ENV=productionに変える)

詰まったこと

  1. テスト環境でRAILS_ENV=productionが実行出来ない。
  2. コンソールが使用が出来ない。
  3. テスト環境のデータベースが反映されない。
  4. アセットプリコンパイルしてもcssや画像が反映されない。

各事象と解決方法

①テスト環境でRAILS_ENV=productionが実行出来ないの解決方法

事象

下記コマンドを打つと、

$ bundle exec rails assets:precompile RAILS_ENV=production

下記のエラーが表示され、本番環境のコマンドが実行出来ない。

ArgumentError: Missing `secret_key_base` for 'production' environment, set this string with `rails credentials:edit`

原因

railsアプリケーションconfig配下にcredentials.yml.encファイルがある事が原因。credentials.yml.enc が本番環境のキーとあってない為のエラーが発生。

$ ls
application.rb  cable.yml            database.yml    environments  leaflet.rb  puma.rb    spring.rb
boot.rb         credentials.yml.enc  environment.rb  initializers  locales     routes.rb  storage.yml

解決方法

下記コマンドでcredentials.yml.encを消し、

アプリ名(config)$ rm credentials.yml.enc

下記コマンドでキーを再生成する。※vimコマンドが開きますが、何も編集せず抜けてOK。

$ EDITOR=vim rails credentials:edit

②コンソールが使用が出来ないの解決方法

事象

下記コマンドを打つと、

$ rails c

下記エラーが表示されて、コンソールが起動しない。

/home/ec2-user/.rvm/gems/ruby-2.6.3/gems/bootsnap-
1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:
in `require': Could not load the 'listen' gem. Add `gem 'listen'` 
to the development group of your Gemfile (LoadError)

原因

gemのlistenが開発環境にしかないということらしい…。

解決方法

下記コマンド、

$ rails c production

もしくは下記コマンドのように環境を定義した上で起動すればOK

$ export RAILS_ENV=production
$ rails c

③テスト環境のデータベースが反映されないの解決方法

事象

エラーが出てデータベースに接続出来ない。

原因

本来は実行環境がテスト環境なので、テスト環境に紐づくDBしか参照にもかかわらず、環境変数を本番環境に指定して実行しているので、本番環境のDBを参照しようとしているが、テスト環境からは接続が出来ないのでエラーが発生している。

解決方法

DBは本番環境を参照出来ないので、テスト環境を参照するよう変更する。
アプリケーションファイルconfig/database.ymlの本番環境設定を下記のように変更する。

production:
  <<: *default
  database: テスト環境のDB名
  username: テスト環境のユーザー名
  password: テスト環境パスワード
  host: テスト環境のホスト名

④アセットプリコンパイルしてもcssや画像が反映されないの解決方法

事象

下記コマンドでアセットプリコンパイルしてもcssや画像が反映されず、画面上HTMLだけの寂しい画面になってしまう…。

bundle exec rails assets:precompile RAILS_ENV=production

原因

アプリケーションファイルconfig/environments/production.rbで静的コンテンツの公開がfalseになっている為。

config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?

解決方法

falseの場合、public配下のファイルが公開されないので、trueにするとうまく行く。
下記コマンドを実行するとtrueになる。

$ export RAILS_SERVE_STATIC_FILES=true

そしてサーバーを再起動する。

まとめ

ネット記事を読み漁り、何とかテスト環境で本番環境を再現する事が出来ました。この方法まずいんじゃないか、もっとこうした方がいいんじゃないかという意見がある方は、コメント頂けたら嬉しいです。

参考記事

https://mattun-programming.hatenablog.com/entry/2020/01/16/123811
https://www.task-notes.com/entry/20160920/1474343389
https://qiita.com/yuiko_akiyoshi/items/263fc49414fb3c7a0162
https://qiita.com/aiandrox/items/408724ab8a4482fb5873

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0