2013-06-19 65 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