はじめに
Railsアプリのデプロイ方法はこちらの手順を参考にさせてもらっています。しかし上記手順では一部、Rails6に対応していない部分があるため、ここで差分としてまとめたいと思います。
基本的に上記手順に沿って進めていき、手順を変更したほうがいい章についてはここに記載されている差分の手順で進めていくことを想定しています。
章立ても上記手順に則っているためここでは飛び飛びになっていますがご了承ください。
1 Conohaの契約
OSは「CentOS 7.7」を選択。
※「CentOS 8.0」など最新のイメージを選択すると、インストールされているコマンドの差異により思わぬエラーが出るため。
2-6 秘密鍵をローカルのsshに登録
ローカルのSSH設定ファイル名が間違っている。こちらの記事を参照。
3-6 Rubyのインストール
Rubyのインストールが完了しても標準出力が戻ってこない?
VPS接続が自動切断された時点でインストールが完了しているため、標準出力が戻ってこないからといって待ち続ける必要はない。
3-7 bundleのインストール
bundleのインストールだけではデプロイ時に以下のエラーが出力される。
SSHKit::Command::Failed: bundle exit status: 1
bundle stdout: Nothing written
bundle stderr: /home/user/.rbenv/versions/2.6.3/lib/ruby/2.6.0/rubygems.rb:283:in `find_spec_for_exe': Could not find 'bundler' (2.0.2) required by your /var/www/app/releases/20200103015156/Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:2.0.2`
bundlerのインストールもここで行っておく。
# rbenv exec gem install bundler
bundleとbundlerの違いをご存知の方がいらっしゃましたら教えて下さい…
4 node.jsのインストール
上記手順でインストールしたnode.jsではバージョンが古いというエラーが出力される。
error shallow-clone@3.0.1: The engine "node" is incompatible with this module. Expected version ">=8". Got "6.17.1"
error Found incompatible module.
そのため、以下のコマンドでnode.jsのインストールを行う。
# curl -sL https://rpm.nodesource.com/setup_11.x | bash -
# yum -y install nodejs
既にnode.jsをインストールしてしまっている場合は以下のコマンドでアンインストールを行う。
# yum -y remove nodejs
また、デプロイ時に以下のエラーが出力されます。
Caused by:
SSHKit::Command::Failed: bundle exit status: 5
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
...
compiling ./libsass/src/utf8_string.cpp
make: g++: コマンドが見つかりませんでした
make: *** [utf8_string.o] エラー 127
これはRails6から追加されたWebpackerの依存パッケージであるsassc内でg++コマンド(C++のコンパイラコマンド)が実行できないというエラーです。
以下のコマンドでg++コマンドをインストールします。
$ sudo yum -y install gcc-c++
5-4 time-zoneを設定
上記手順でタイムゾーンを設定すると、MySQLコンソールにログインしようとしたところで以下のエラーが出力される。
$ mysql -u root -p
mysql: unknown variable 'default-time-zone=Asia/Tokyo'
タイムゾーンの設定は以下の通り行う。
symbolic-links=0 # 既存の行
default-time-zone = 'Asia/Tokyo' # ここに挿入
log-error=/var/log/mysqld.log # 既存の行
6 Nginxの設定
Nginxの設定はこちらの記事を参照。
7 Githubの公開鍵登録
設定についてはこちらの記事も参照。
2-4 productionの環境設定
config/deploy.rb
のシンボリック設定を以下のように変更する。
# シンボリックリンクをはるファイル
set :linked_files, fetch(:linked_files, []).push('config/secrets.yml')
↓
# シンボリックリンクをはるファイル
set :linked_files, fetch(:linked_files, []).push('config/master.key')
2-5 環境変数の設定(サーバー側)
secrets.yml
の代わりにmaster.key
を作成する。
まとめ
上記手順を合わせてこの差分を行うことでエラーなくデプロイができるはずです。一発でデプロイ完了してみたいですね。