経緯
Rails6で作ったアプリをAWSのEC2にデプロイする際にハマったのでそのポイントを書き残しておきます。
Rails6とRails5で何が違うのか?
モジュールバンドラが変更された。
モジュールバンドラとはCSS、JavaScript、画像などを一つのファイルとしてまとめるためのもの。Rails6ではWebpackerが標準のモジュールバンドラとなりました。Webpackerとはwebpackをrailsで使用するためのGemで、Webpackerを使うためにはwebpackをインストールしなければなりません。そのためRails5でAWSにデプロイする時よりもRails6では手順が多くなります。
環境
- Rails 6.0.3.2
- ruby 2.7.1
- DB mySQL 8.0.22
- OS amazon linux2
状況
- EC2内の環境構築は終わっている(DBの起動、githubからアプリのclone、webサーバー・アプリケーションサーバーの起動など)
-
bundle exec rails assets:precompile
でエラーが起きている。
1 Node.jsについてのエラー
Webpacker requires Node.js ">=10.17.0" and you are using v6.17.1
今使用しているNode.jsのバージョンではWebpackerを使うことができないとのエラー。
なので新しいバージョンのNode.jsをインストールします。
Node.jsのインストールに関しては下記の記事が参考になりました。
https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html
下のコマンドで 現在のバージョンが確認できます。
nvm current
13.8.0
2 Yarnについてのエラー
webpackをインストールするには
yarnのインストール(著者はマシンイメージにAmazon Linux2を使ったのでそのリンクを貼っておきます。)yarnとはjavascriptのパッケージ管理ツールです。webpackをインストールするために必要になります。Yarnのインストールに関しては下記の記事が参考になりました。
https://classic.yarnpkg.com/en/docs/install#centos-stable
下のコマンドでバージョンが表示されていればインストールされています。
yarn --version
1.22.5
パッケージをインストール(package.jsonに書いてあるパッケージをインストールしてくれます。)
yarn install
3 エラー出なくなったけどjavascriptが反映されない場合
package.json
のdevDependencies
devDependencies中に書かれているパッケージは開発・テスト環境でしか使うことができません。なので本番環境で使いたいパッケージでがdevDependenciesに書かれている場合は外に移動してあげる必要があります。
※自分の場合webpackがdevDependenciesに書かれていたので、本番環境でjavascriptやfont awesomeのアイコンが反映されない、本来routes.rb
でpostで定義していた通信が、getで行われるといったエラーが起きました。
参考