我遇到了Heroku和Rails应用程序的问题。在我的Gemfile中,我指定ruby "2.1.5"
,但我的应用程序崩溃了以下日志:
2015-04-08T20:54:15.248878+00:00 heroku[web.1]: Starting process with command `bin/rails server -p 57371 -e production`
2015-04-08T20:54:17.365771+00:00 app[web.1]: /app/vendor/bundle/ruby/2.1.0/gems/bundler-1.7.12/lib/bundler/definition.rb:380:in `validate_ruby!': Your Ruby version is 1.9.3, but your Gemfile specified 2.1.5 (Bundler::RubyVersionMismatch)
2015-04-08T20:54:17.365791+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.1.0/gems/bundler-1.7.12/lib/bundler.rb:118:in 'setup'
2015-04-08T20:54:17.365793+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.1.0/gems/bundler-1.7.12/lib/bundler/setup.rb:17:in 'top (required)'
2015-04-08T20:54:17.365795+00:00 app[web.1]: from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in 'require'
2015-04-08T20:54:17.365796+00:00 app[web.1]: from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in 'require'
2015-04-08T20:54:17.365798+00:00 app[web.1]: from /app/config/boot.rb:3:in '<top (required)>'
2015-04-08T20:54:17.365800+00:00 app[web.1]: from bin/rails:7:in 'require_relative'
2015-04-08T20:54:17.365802+00:00 app[web.1]: from bin/rails:7:in <main>
2015-04-08T20:54:18.135689+00:00 heroku[web.1]: Process exited with status 1
2015-04-08T20:54:18.155346+00:00 heroku[web.1]: State changed from starting to crashed
2015-04-08T20:54:41.881395+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=....herokuapp.com request_id=1ec36521-d1ca-4ea3-b635-b79caf9b82c9 fwd="x.x.x.x" dyno= connect= service= status=503 bytes=
以下是一些奇怪的命令结果:
heroku run ruby -v: ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]
heroku run bundle install: Your Ruby version is 1.9.3, but your Gemfile specified 2.1.5 (Bundler::RubyVersionMismatch)
在将Gemfile从1.9.3切换到2.1.5之前,一切都很好。任何帮助表示赞赏。此外,它看起来不像Heroku使用rvm,所以我不知道他们是如何做他们的魔术。
编辑:我已经尝试删除该应用并从一开始就在Gemfile中创建一个版本为2.1.5
的全新版本(后来2.2.0
)我从同一个git repo中同步了它。
编辑2 实际上在部署时崩溃,而不仅仅是在页面服务上,以及在运行bundle(r)
时。 (到目前为止)
编辑3:每次部署时,heroku都以:
开头remote: -----> Ruby app detected
remote: -----> Compiling Ruby/Rails
remote: -----> Using Ruby version: ruby-2.1.5
remote: -----> Installing dependencies using 1.7.12
remote: Ruby version change detected. Clearing bundler cache.
remote: Old: ruby 1.9.3p551 (2014-11-13 revision 48407) [x86_64-linux]
remote: New: ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]
remote: Running: bundle install --without development:test --path vendo
(旧版/新版的正确版本)
编辑4:似乎Heroku没有正确加载环境变量(或者是吗?),因此加载并使用了错误的ruby版本:
local$ heroku config -s | grep PATH
PATH=/app/vendor/ruby-2.1.5/bin:/app/vendor/bundle/ruby/2.1.0/bin:/bin:/usr/bin:/app/bin:/app/vendor/bundle/bin
local$ heroku run ruby -v
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]
local$ heroku run bash
heroku $ echo $PATH
/app/bin:/app/vendor/bundle/bin:/app/vendor/bundle/ruby/2.1.0 /bin:/app/vendor/ruby-2.1.5/bin:/app/vendor/bundle/ruby/2.1.0 /bin:/bin:/usr/bin:/app/bin:/app/vendor/bundle/bin
heroku $ cat .profile.d/ruby.sh | grep PATH
export GEM_PATH="$HOME/vendor/bundle/ruby/2.1.0:$GEM_PATH"
export PATH="$HOME/bin:$HOME/vendor/bundle/bin:$HOME/vendor/bundle/ruby/2.1.0/bin:$PATH"
环境正在ruby
而不是/app/bin
中寻找/app/vendor/ruby-2.1.5/bin
。如果在Heroku环境中我export PATH
得到正确的值,我可以毫无问题地运行bundle
。不幸的是,似乎服务于应用程序的实例不是。
我可以更改PATH
中的profile.d/ruby.sh
或创建.ruby-version
文件,但在heroku上既没有nano,也没有pico和vim。我该怎么办?
答案 0 :(得分:3)
好吧,48小时后,我在这里找到了解决方案:other SO post。
确实,我的项目中有一些剩余的垃圾,即bin
文件夹。这是解决它的原因:
$ bundle config --delete bin
$ bundle exec rake rails:update:bin
所有当地人。然后推送到heroku,不要忘记包含新生成的文件。乌拉!
答案 1 :(得分:1)
在部署到Heroku时遇到了涉及ruby版本不匹配的相关问题。问题是捆绑器的冲突版本。 Heroku将每个buildpack锁定到特定版本的bundler。
要修复,请更新捆绑包gem update bundler
,bundle install
并再次部署。