2013-06-19 63 views
3

在推入heroku时,Ruby版本发生了变化。heroku推红宝石版本变化

 Ruby version change detected. Clearing bundler cache. 
    Old: ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux] 
    New: ruby 1.9.2p320 (2012-04-20 revision 35421) [x86_64-linux] 

现在 heroku run 'ruby -v'返回ruby 1.9.2p320 (2012-04-20 revision 35421) [x86_64-linux]

但是ruby -v仍然返回ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]

这里是我的RVM名单

rvm list 

rvm rubies 

=* ruby-1.9.2-p290 [ i686 ] 

# => - current 
# =* - current && default 
# * - default 

我不想改变红宝石版本。它是如何发生的?我该如何解决这个问题。请帮忙。

+0

什么是它说,在你的宝石文件? – Narfanator

+0

您的应用程序主文件夹中有.rvmrc文件..? – Jyothu

+0

.rvmrc文件包含此行。 rvm [email protected]_name –

回答

3

我得到了相同的信息,所以我认为这是在Heroku上的Ruby版本的变化(记住,只有PATCHLEVEL改变)

你可能无法恢复在Heroku上侧这一变化,但你肯定应该升级自己的Ruby版本。

1

Heroku绝不会改变您的应用程序仅针对修补程序级别运行的Ruby的主版本或次版本。

在你的Gemfile您可以指定主要/次要与

ruby '1.9.2' 

但你不能指定补丁级别的Heroku会处理这件事给你。另外,当你的应用程序在Heroku上时,Rvm不会被使用,所以不会有所作为。因此,当Heroku更改补丁级别的红宝石(如其变更日志中所示)时,您将看到发生此类行为。

+0

非常感谢。但我已经尝试将ruby'1.9.2'添加到gemfile并推送。同样的结果。也尝试与Heroku回滚。这是不可能恢复红宝石补丁版本? –

+1

不,这是不可能的。出于安全原因,补丁级别更新是平台范围内的。虽然,我不知道是否可以使用自定义构建包来锁定特定的修补程序级别。 –

+0

延迟工作失败后,这种升级。任何解决方案 –

2

Heroku有关于如何指定ruby版本的说明。该文件在这里:https://devcenter.heroku.com/articles/ruby-versions。正如@JohnBeynon所说,Heroku是一款PaaS,所以它们为你管理很多事情,包括补丁版本(见下一段)。由于Heroku不使用RVM,因此您的RVM设置都不会改变Heroku上的任何内容。

要指定你想要的红宝石的版本,添加到您的Gemfile:

ruby "1.9.2" 

在你的情况,你不能指定补丁版本,所以你不能修复此;不过,这个补丁版本的改变是件好事。它仍然是兼容的,它只会有更多的安全更新和错误修复。你还应该升级你的本地机器,而不是试图降级你的服务器。还有更多关于这个在:https://blog.heroku.com/archives/2012/5/9/multiple_ruby_version_support_on_heroku

虽然你可以为你的应用程序指定的Ruby版本,你不能 指定补丁版本,如Ruby 1.9.2-P290。 Ruby修补程序通常包含重要的错误和安全修复程序,并且极其兼容。 Heroku将提供您请求的最小版本号的最安全补丁级别。

1

你不必在本地更改ruby版本,ruby patchlevels不应该引入不兼容问题,你应该在较早的补丁上进行很好的开发并在较新的版本上部署......这表示不好的事情可以一如既往地发生,ruby团队可能会由于安全问题,被迫在patchlevel中引入不兼容性。

所以最好是升级你的本地版本的红宝石:

rvm get stable 
rvm upgrade 1.9.2 

,或者更明确:

rvm upgrade 1.9.2-p290 1.9.2-p320