この記事について
Railsにはデフォルトでdevelopment, test, productionの3つの環境が用意されていますが、今回はそれらに加えて
- 独自の環境を定義する
- 複数の環境を同時に走らせる
方法を書いてみます。使っているOS, Sever, Railsのバージョンは以下の通りです。
CentOS Linux release 7.6.1810 (Core)
Server version: Apache/2.4.6 (CentOS)
Phusion Passenger: 5.3.5
Rails 5.1.7
独自環境を定義する
config/environments
以下に <new env>.rb
というファイルを新しく作ります。<new env>
の中身は定義したい環境の名前に置き換えてください。内容は特にこだわりがなければproduction.rb
のコピペでいいと思いますが、relateive_url
の設定は新しい環境のパスに合わせて変更しておきましょう
Rails.application.routes.default_url_options = { host: 'localhost', port: 3000, relative_url_root: '/<new env>' }
config.relative_url_root = "/<new env>"
続いて、config
フォルダ内の以下のファイルに新しい環境の設定を追加しましょう。書き方はすでに登録されている3つの環境を見ながら書けば、問題ないです。
- config/cable.yml
- config/database.yml
- config/secrets.yml (
$bundle exec rake secret
であらかじめキーを生成しておく) - config/settings.yml
使っているアプリによってはほかにも設定ファイルを定義しているかもしれません。その場合はそのファイルも同様に更新します。
最後に、本番環境用にデプロイする場合はアセットをプリコンパイルしておきましょう
$bundle exec rake assets:precompile RAILS_ENV=<new env>
データベースの作成
新しい環境用にデータベースを作成します。DBのユーザー名やパスワードは設定ファイルで定義されたものが使われます。
$bundle exec rake db:create RAILS_ENV=<new env>
$bundle exec rake db:migrate RAILS_ENV=<new env>
Passenger への登録
ここまでできたら、次はpassengerに新しい環境のURLを登録します。編集するのは/etc/httpd/conf.d/<app name>.conf
というファイルです。以下の3つの項目を追記します。
<Location /<new env>>
PassengerRuby /usr/local/rvm/gems/ruby-2.4.1/wrappers/ruby
PassengerHighPerformance off
PassengerBaseURI /
PassengerAppRoot /var/www/<new env>
RailsEnv <new env>
</Location>
Alias /customenv /var/www/<new env>/public
<Directory /var/www/<new env>/public>
Allow from all
Options -MultiViews
# Uncomment this if you're on Apache >= 2.4:
Require all granted
</Directory>
ディレクトリのパスをすでに登録されているものと別のものにしないといけないので$ln <old env> <new env>
などして、シンボリックリンクを作成し、便宜上パスを別物にしておきます。
デプロイ
apacheを再起動しましょう。
$sudo apachectl restart
先ほど定義したパスでアプリケーションをリクエストすると、正常に起動しているはずです
一度アクセスした後であれば$passenger-status
で新しい環境がデプロイされていることが確かめられます。