Heroku:bash:bundle:命令未找到。

6

我正在按照Heroku的说明,将一个Aspen版本的Heroku应用移植到Cedar堆栈。

我已经到了最后一步部署。但是出现了以下错误:

    2012-10-22T11:23:53+00:00 heroku[web.1]: Starting process with command `bundle exec thin start -p 40310 -e production`
2012-10-22T11:23:54+00:00 app[web.1]: bash: bundle: command not found

我无法想象我如何负责告诉Heroku堆栈bundle的位置或提供它,因为bundler正是用于完成这一工作。该命令在应用程序的Procfile中指定:

web: bundle exec thin start -p $PORT -e $RACK_ENV

在stackoverflow上的另一个类似问题表明,如果应用程序最初没有Procfile被推送到Heroku,则会发生这种情况,因此Heroku会对应用程序的类型产生错误的想法。该帖子的作者删除了他的应用程序并创建了一个新的,并报告成功。但是,删除和重新创建我的移植应用程序所需的工作量很大。有没有办法可以修复这个问题而不是重新开始?


在我的情况下,在我的Gemfile中指定与我的应用程序兼容的最新Ruby版本解决了这个问题。 - Michael Mior
2个回答

5
Heroku的slug构建过程在处理ruby 1.8.7应用时可能已经发生了变化。我猜测他们开始捆绑1.8路径而不是1.9.1用于1.8应用。我之前工作正常的应用在我尝试推送新版本后停止工作。
下面是让它重新工作的方法:
heroku config:add PATH=bin:vendor/bundle/1.8/bin:/usr/local/bin:/usr/bin:/bin GEM_PATH=vendor/bundle/1.8

我从一个使用相同 Git 存储库的新创建应用程序中获取了这些路径。
编辑:事实证明 Heroku 发布了一篇 devcenter 文章 Changing Ruby Version Breaks Path,其中指定了各种 Ruby 版本的路径。

更深入的了解 - 如果你第一次推送一个带有Gemfile的bundle时,Gemfile中包含正确的ruby版本,那么路径现在已经设置正确(也许是作为对我的Heroku工单的回应)。如果你没有指定,它会(可以理解地)假设1.9.1。在犯错之后,这是正确的路径(我第一次根据我看到的1.9.1错误地猜测了1.8.7!) - GreenAsJade

2

我曾经遇到过同样的问题,通过设置正确的Heroku配置变量来解决了它。

$ heroku config
=== xxxx Config Vars
DATABASE_URL:                  postgres://(...)
GEM_PATH:                      vendor/bundle/ruby/1.9.1
HEROKU_POSTGRESQL_CRIMSON_URL: postgres://(...)
LANG:                          en_US.UTF-8
PATH:                          bin:vendor/bundle/ruby/1.9.1/bin:/usr/local/bin:/usr/bin:/bin
PGBACKUPS_URL:                 https://(...)
RACK_ENV:                      production
RAILS_ENV:                     production

你可以创建一个空的Rails应用程序,将其推送到Heroku并检查它自动设置的变量,然后将它们复制(并调整)到你的应用程序中。


谢谢!我的配置看起来和你的一样。实际上有点奇怪,因为我的是一个1.8.7应用程序,但我不明白这是否会对bundle是否在路径上产生影响。 - GreenAsJade
嘿,你能具体说一下是什么改变让它工作了吗? - GreenAsJade
1
你应该将配置适配到ruby 1.8.7 我猜让它工作的是更改PATH和GEM_PATH 尝试将1.9.1更改为1.8.7或检查一个使用ruby 1.8.7创建的新应用程序的配置值 - Lluís

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接