2010-09-16 111 views
0

在此過程中,我已經發布了其他一些問題,但我更瞭解我正在嘗試執行的操作,因此我想我會問這個問題。將Rails 2應用程序移植到新服務器上

我已經繼承了一個Rails 2.2.2應用程序,該應用程序目前在我有權訪問的服務器上以生產形式運行。我試圖將該應用程序移植到我的服務器,版本控制等。我首先嚐試複製源代碼,並使其在Rails 3和最新版本的Gem下運行,但事實證明,它比我認爲這將是。看起來最好的解決方案是簡單地使用當前系統正在使用的相同版本的Rails和其他gem,並將應用程序按原樣移植到應用程序中。

所以我想知道做到這一點的最好方法是什麼?我可以將源代碼放入我的版本控制系統中,並以與現在相同的方式設置Capistrano和Passenger。問題是在同一版本中獲得所有寶石。我聽說過凍結Rails和凍結寶石,但很多教程看起來有點過時。凍結當前正在運行的生產服務器上的寶石是否安全?或者是否應該只列出寶石及其版本的列表,並手動將它們安裝在我要移植到的新服務器上?

編輯:我跟着tadman的建議,併成立了一個Gemfile中所有的寶石和安裝在生產服務器上的最新版本,但現在我已經得到了與那些版本混亂,例如:

Bundler could not find compatible versions for gem "ruby2ruby": 
    In Gemfile: 
    merb-action-args (= 1.0.8.1) depends on 
     ruby2ruby (>= 1.1.9) 

    ambition (= 0.5.4) depends on 
     ruby2ruby (1.1.8) 

生產服務器有時最多安裝4個版本的同一個gem,但Bundler似乎只想處理每個版本。是否有一種簡單的方法來解決這樣的情況,還是回到生產中尋找凍結的寶石?

編輯2:我結束了刪除所有寶石版本,除了鐵軌和做bundle install。到目前爲止,即使所有版本都不完全匹配,它似乎仍在工作。

回答

1

切換到Rails 3可能是一件非常頭疼的事情,但打包寶石的歷史版本可能會更容易。在某種程度上,這可以通過bundler來簡化,您可以在Gemfile中爲您的應用程序聲明您需要的特定版本。雖然這是Rails 3中使用的事實上的方法,但它是平臺不可知的,可以在任何版本的Rails上用作分發機制。

您通常可以確定與gem list一起使用的寶石版本,除非config/environment.rb中另有規定,否則會自動選擇最新版本。很容易將寶石列表轉換爲Gemfile

+0

我沒有使用'gem list'中的(巨大)寶石列表,而是通過列表中的代碼庫中的寶石,刪除那些未使用的寶石。這使捆綁下來更容易管理的大小。 – jrdioko 2010-09-21 22:57:19

相關問題