不需要使用webpacker,在Heroku上部署Rails5和yarn应用程序

尽管将现有的Rails应用程序升级到了5.1版本,但由于之前没有使用yarn来管理前端库,所以我进行了修正以使用yarn。然后,当我准备将其部署到Heroku时,出现了assets:precompile错误并导致了应用崩溃。导致错误的原因是缺少JS库。

最初我使用Rails5.1+webpacker的组合部署了一个应用在Heroku上,并且那时候即使没有额外的考虑,也能正常地部署。可是最近……出现了一个问题,我不知道原因所在。但是在Heroku的相关文章中提到,当检测到有webpacker时,会先安装yarn,并在安装完前端相关库后进行assets:precompile操作。

Heroku开发中心:当存在Webpacker宝石时,Ruby应用程序现在会安装Yarn。

然而,由于我没有使用webpacker,所以我不想专门安装gem来运行yarn install。我找到了解决方法,所以我会将其记录下来。

在运行 rake assets:precompile 命令之前插入处理步骤。

在执行 rake 任务之前和之后,可以插入处理步骤。

HsbtDiary: 通过Rake,在任意任务前后执行另一个任务。

我在这里添加了一个在assets:precompile之前执行yarn install的过程。

task :js_deps_install do
  sh "yarn install"
end
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 (Heroku的Node.js)

 

    heroku/ruby (Heroku的Ruby)

必须这样做。 zuò)

heroku buildpacks:add --index 1 heroku/nodejs

如果首先是nodejs,则会首先执行yarn的安装。
如果是第二个,需要注意yarn的安装不会被执行。

出发部署吧!

只需要部署即可。

git push heroku master

通过这样做,你可以将Rails5.1和yarn(不使用webpacker)的应用部署到Heroku上。

请参阅该网页。

    Rails 5.1 with Yarn + Sprockets, without Webpacker
bannerAds