Heroku的Ruby 2.6.1和Bundler 2.0.1:我应该编写Procfile吗?

时间:2019-07-09 16:09:04

标签: ruby-on-rails ruby heroku rake bundler

尝试将应用程序部署到Heroku时遇到了我无法处理的错误(这是我第一次)。

# ERROR when I try to `git push heroku master`
remote: -----> Detecting rake tasks
remote: 
remote:  !
remote:  !     Could not detect rake tasks
remote:  !     ensure you can run `$ bundle exec rake -P` against your app
remote:  !     and using the production group of your Gemfile.
remote:  !     Activating bundler (2.0.1) failed:
remote:  !     Could not find 'bundler' (2.0.1) required by your /tmp/build_e569680f858939ef8f1f8ef3e8902eff/Gemfile.lock.
remote:  !     To update to the latest version installed on your system, run `bundle update --bundler`.
remote:  !     To install the missing version, run `gem install bundler:2.0.1`
remote:  !     Checked in 'GEM_PATH=/tmp/build_e569680f858939ef8f1f8ef3e8902eff/vendor/bundle/ruby/2.6.0', execute `gem env` for more information
remote:  !     
remote:  !     To install the version of bundler this project requires, run `gem install bundler -v '2.0.1'
# heroku buildpacks
=== staging-det-music Buildpack URLs
1. heroku/nodejs
2. heroku/ruby
# Gemfile.lock
RUBY VERSION
   ruby 2.6.1p33

BUNDLED WITH
   2.0.1

我尝试了几种解决方案,例如:

  • 运行RAILS_ENV=production bundle exec rake assets:precompile(请参阅here

  • 添加RAILS_SERVE_STATIC_FILES键(相同)

  • 将Ruby升级到2.6.3(请参见here,使用rbenv或rvm无法找到2.6.3)

我相信这可能是由于this issue造成的。我对此感到担心吗?

  

2)使用binstubs运行命令而不是bundle exec时,错误   使用Ruby 2.6.x时,可以激活Bundler版本。这个错误   向Ruby Core报告,并将在Ruby 2.6.3被修复时修复   已发布。

     

短期内,解决方法是确保   Procfile和app.json以bundle exec开头。例如:

     

web: bundle exec bin/rails server -p $PORT -e $RAILS_ENV

     

worker: bundle exec sidekiq -C config/sidekiq.yml

作为一个新手,我真的迷失了,有人可以帮我吗?

感谢您的时间

解决方案:发现here删除了BUNDLED WITH和Gemfile.lock中的以下行

1 个答案:

答案 0 :(得分:1)

known issues with Bundler 2 on Heroku,其中包括:

  

指定捆绑程序2.0.2的Gemfile.lock不适用于捆绑程序2.0.1

     

如果您尝试将使用捆绑器2.0.2的应用程序部署到带有捆绑器2.0.1的Heroku平台上,则可能会出现以下错误:

`find_spec_for_exe': can't find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException)
     

这是由于Rubygems捆绑程序版本检查代码中的错误所致。为避免此问题,请升级您的Ruby版本。它在2.5.5+和2.6.3+中已修复。如果不更新,则为Ruby版本,则Bundler 2.x的每个新发行版都会触发此问题。

在本地将Ruby至少升级到2.6.3版本,在rubyGemfile中更新bundle install版本,提交更改并重新部署。