当在Heroku上部署使用Webpacker的Rails应用程序时,可能会出现与yarn版本相关的错误问题
随着引入了webpacker,Rails变得更容易进行前端开发,使用了JavaScript资产。
实际上,我已经引入了webpacker并成功运行了一个本地应用程序,因此我尝试将其部署到Heroku并进行运行确认。然而,在此过程中遇到以下错误:
remote: -----> Installing node-v6.11.1-linux-x64
remote: -----> Installing yarn-0.22.0
remote: -----> Detecting rake tasks
remote: -----> Preparing app for Rails asset pipeline
remote: Running: rake assets:precompile
remote: Webpacker requires Yarn >= 0.25.2 and you are using 0.22.0
remote: Please upgrade Yarn https://yarnpkg.com/lang/en/docs/install/
remote: !
remote: ! Precompiling assets failed.
remote: !
remote: ! Push rejected, failed to compile Ruby app.
remote:
remote: ! Push failed
本次是关于这个问题的应对方法。
版本
rails版本是5.1.0
webpacker版本是3.0.1
由于某种原因
webpacker3.0.1版本需要0.25.2以上的yarn版本,但由于在Heroku上安装了0.22.0版本,因此出现了错误。造成在Heroku上安装0.22.0版本的原因在于此处的评论,heroku-buildpack-ruby(一个在Heroku上构建Rails应用的工具)中硬编码了yarn的版本(相关代码)。截至2017年9月19日,已经有一份提升该版本的PR已经提交。如果被合并,以上问题应该不会再出现。
处理
在Heroku的官方文档中找到了这个解决方法,只需将heroku-buildpacks按照nodejs -> ruby的顺序进行配置,即可实现成功部署。使用命令行的话,可以执行以下指令。
$ heroku buildpacks:clear -a (アプリ名) # buildpacks を初期化する
$ heroku buildpacks:add heroku/nodejs -a (アプリ名)
$ heroku buildpacks:add heroku/ruby -a (アプリ名)
这将会在heroku-buildpack-nodejs中安装yarn(版本为0.28.4)。
需要指定版本时,请在应用的package.json中进行设置。
"engines": {
"yarn": ">= 0.25.2"
}
根据上述写法,似乎heroku-buildpack-nodejs能够根据指定的版本进行安装。