2013-01-04 70 views
0

只需通過RVM更新紅寶石臨時服務器上:更新紅寶石在生產,現在Rails會無法啓動,因爲依舊引用老紅寶石

$ rvm upgrade 1.9.3-p327 1.9.3-p362 

我說「是」所有的遷移和別名問題,包括刪除老紅寶石。

現在正從客運錯誤,每當我嘗試訪問Rails應用程序:

Error message: 
dlopen(/Library/WebServer/rails/myapp/shared/bundle/ruby/1.9.1/gems/bcrypt-ruby-3.0.1/lib/bcrypt_ext.bundle, 9): 
Library not loaded: /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/libruby.1.9.1.dylib 
Referenced from: /Library/WebServer/rails/myapp/shared/bundle/ruby/1.9.1/gems/bcrypt-ruby-3.0.1/lib/bcrypt_ext.bundle 
Reason: image not found - /Library/WebServer/rails/myapp/shared/bundle/ruby/1.9.1/gems/bcrypt-ruby-3.0.1/lib/bcrypt_ext.bundle 

我已經重新安裝了乘客......還跑cap deploy略有更新Gemfile。但似乎仍然有一些對舊的Ruby的引用。 這裏發生了什麼,以及如何更新或重新編譯,所以寶石等引用新的Ruby?是否有一些我可以在Capistrano中指定的標誌強制重新編譯寶石(假設這是問題)?

編輯(加入一些RVM信息):

我使用的「多用戶」安裝RVM此服務器上,因爲和寶石安裝在:/Library/WebServer/rails/popup/shared/bundle/ruby/1.9.1/gems,而不是在那裏可以預計他們:/usr/local/rvm/rubies/ruby-1.9.3-p362/lib/ruby/gems/1.9.1/gems。從來沒有真正理解RVM在多用戶安裝中做了什麼,但它已經工作。

所以,我不能真的$ rvm gemset use myapp然後bundle install,因爲我不認爲這將安裝在正確的目錄。

這裏的Capistrano的的過程中bundle install任務輸出:

* 2013-01-03 19:23:22 executing `bundle:install' 
    * executing "cd /Library/WebServer/rails/myapp/releases/20130104032317 && bundle install --gemfile /Library/WebServer/rails/myapp/releases/20130104032317/Gemfile --path /Library/WebServer/rails/myapp/shared/bundle --deployment --quiet --without development test" 
+0

您正在使用Apache或nginx的?如果apache,你有沒有在任何時候更新httpd.conf中包含的模塊?我很好奇,如果Web服務器試圖使用一個壞的乘客模塊。 –

+0

** apache **。添加了3行到'httpd。乘客安裝後(如往常一樣)。 – Meltemi

回答

1

誤差約爲/Library/WebServer/rails/myapp/shared/bundle/ruby/1.9.1/gems/bcrypt-ruby-3.0.1/lib/bcrypt_ext.bundle引用不存在的文件/usr/local/rvm/rubies/ruby-1.9.3-p194/lib/libruby.1.9.1.dylib這不應該發生,因爲在大多數情況下libruby.1.9.1.dylib應該作爲的時候,它的運行已經從紅寶石加載。所以要麼你只使用靜態編譯來安裝ruby,否則它可能會被破壞。

你確定使用紅寶石1.9.3-p362嗎? RVM爲OSX 10.8提供了1.9.3-p327,它是靜態編譯的(OSX上沒有程序包管理器問題)。也許你使用該版本(p327)?

至於重新安裝寶石 - 現在還沒有一個命令,這將迫使在捆綁重新安裝安裝的寶石,但是你可以只取出寶石和動力安裝新鮮:

cd /Library/WebServer/rails/myapp/ 
rm -rf shared/bundle 
bundle install 
+0

@ mpapis- yes,'= * ruby​​-1.9.3-p362 [x86_64]'安裝在本機上。升級過程消除了以前的版本,並且由於某種原因,並未更新鏈接,儘管RVM升級過程表示它會這樣做。猜測寶石需要重新安裝,但請參閱上面的'編輯(添加一些RVM信息)',以瞭解爲什麼我不能只使用'rvm gemset使用myapp'和'bundle install'。或者至少我不認爲我能!!! – Meltemi

+0

RVM會升級它可以管理的所有信息,但您的本地捆綁程序目錄對於RVM無法識別,因此無法升級它,這是使用「bundle install --deployment」或bundler capistrano集成的成本。 – mpapis

+0

是的,這就是我的想法。因此,修復問題的最佳方法是在服務器上「rm -rf shared/bundle」,然後再從開發機器上「部署」?並看看哪裏得到我... – Meltemi

0

嘗試rvm list列出你所有的Ruby版本

然後使用rvm use <ruby version>使用該版本

例:

[[email protected] ~]$ rvm list 

rvm rubies 

    ruby-1.9.2-p290 [ x86_64 ] 
=> ruby-1.8.7-p357 [ x86_64 ] 

rvm use rvm use ruby-1.9.2-p290 

HTH

+0

'$ rvm list'顯示:'= * ruby​​-1.9.3-p362 [x86_64]'。所使用的RVM是一個安裝了RVM的「系統」(或者現在他們正在調用的那個)。不知道這與這有什麼關係?!?在以前的Ruby下工作正常。我只想找出在生產環境中升級Ruby的最佳方式。 – Meltemi