LoginSignup
15
15

More than 5 years have passed since last update.

webpackerなしでherokuにRails5&yarnアプリをデプロイする

Last updated at Posted at 2017-08-29

既存のRailsアプリを5.1系にアップデートしたものの、フロント系のライブラリの管理にyarnを使ってなかったので、yarnを使うように修正しました。そして、いざHerokuにデプロイしたら、assets:precompileでエラーが発生して落ちてしまいました。
原因は、JSのライブラリがないから。

最初からRails5.1+webpackerの組み合わせのアプリはHerokuにデプロイしたことがあって、そのときは特に何も考えなくても普通にデプロイできたのに、はて…。という感じで、原因がわからなかったのですが、Herokuの記事を見ると、webpackerがあることを検出すると、yarnのインストールを行い、フロント系のライブラリをインストールした後にassets:precompileが行われるようです。

Heroku Dev Center: Ruby apps now get Yarn installed when the Webpacker gem is present

しかし、webpackerは使っていないので、わざわざyarn installのためにgemを入れたくありません。
調べたら解決法がありましたので残しておきます。

rake assets:precompileの前に処理を差し込む

rake taskは実行前、実行後に処理を差し込むことができます。

HsbtDiary: Rakeで任意のタスクの前後に別のタスクを実行する

ここでは、assets:precompileの前に、yarn installを行わせる処理を入れました。

lib/tasks/yarn.rake
task :js_deps_install do
  sh "yarn install"
end
Rakefile
require File.expand_path('../config/application', __FILE__)
Rails.application.load_tasks

# この1行を追加
Rake::Task["assets:precompile"].enhance [:js_deps_install]

herokuのbuildpacksの順番を変更する

通常のRailsアプリであれば、buildpacksはheroku/rubyのみだと思います。
ここに、heroku/nodejsを追加するのですが、順番が重要です。

  1. heroku/nodejs
  2. heroku/ruby

にしなければなりません。

heroku buildpacks:add --index 1 heroku/nodejs

先頭がnodejsだと、最初にyarnのインストールが実行されるようになります。
2番目にすると、yarnのインストールが実行されないので注意してください。

いざデプロイ!

あとはデプロイするだけです。

git push heroku master

これで、HerokuにRails5.1&yarn(webpackerなし)のアプリをデプロイできました。

参考ページ

15
15
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
15
15