2010-08-18 76 views
0

我有一個rails應用程序,我使用Rails 2.3.5在Windows上開發,使用sqlite3作爲我的數據庫引擎,內部Mongrel服務器作爲我的web服務器。部署凍結Rails應用程序時出現問題 - 「找不到RubyGem機架」

我將這個應用程序部署到運行Rails 2.1.0的託管Linux機器,使用Postgres作爲我的數據庫,以及Apache(調用dispatch.cgi)作爲我的web服務器。我沒有權限更新本地Ruby或Rails安裝,或者本地安裝gems。

爲了使我的部署更容易(我認爲...),我已經爲我部署的系統取得了我的代碼庫分支。在這個分支上,我更新了database.yml來引用postgres並運行rake rails:freeze:gemsrake gems:unpack:dependencies。然後我將這個分支導出到我的生產服務器。

當我嘗試查看生產服務器上我的應用程序,我得到的錯誤:

Application error 
Rails application failed to start properly" 

檢查Apache的錯誤日誌,我看到以下內容:

./../config/../vendor/rails/railties/lib/initializer.rb:271:in `require_frameworks': Could not find RubyGem rack (~> 1.0.1) (RuntimeError) 
    from ./../config/../vendor/rails/railties/lib/initializer.rb:134:in `process' 
    from ./../config/../vendor/rails/railties/lib/initializer.rb:113:in `send' 
    from ./../config/../vendor/rails/railties/lib/initializer.rb:113:in `run' 
    from ./../config/environment.rb:9 
    from dispatch.cgi:5:in `require' 
    from dispatch.cgi:5 

我很困惑。如果需要Rack,爲什麼不包括在gems:unpack中?我怎樣才能得到這個工作?

(如果是相關的,vendor$ find . -name rack*給出如下:

./rails/railties/lib/rails/rack 
./rails/railties/lib/rails/rack.rb 
./rails/railties/lib/rails/.svn/text-base/rack.rb.svn-base 
./rails/actionpack/test/controller/rack_test.rb 
./rails/actionpack/test/controller/.svn/text-base/rack_test.rb.svn-base 
./rails/actionpack/lib/action_controller/rack_lint_patch.rb 
./rails/actionpack/lib/action_controller/.svn/text-base/rack_lint_patch.rb.svn-base 

)不包含

回答

4

機架,因爲它是一個框架的寶石。給供應商的這種寶石可以手動解壓到賣主/寶石是這樣的:

cd vendor/gems; gem unpack rack -v="1.0.1"

你也可以開始使用bundler來管理你的依賴,像Rails現在默認確實在三個版本,以避免類似的問題你目前正在經歷的一件事。

+0

啊,這絕對有幫助,但我們不是那裏。首先,我還必須耙寶石:refr esh_specs,它已上架。我現在收到以下錯誤: /var/www/chowlett/dominion_frozen/vendor/rails/activesupport/lib/active_support/whiny_nil。rb:52:在'method_missing':未定義的方法'env_table'爲nil:NilClass(NoMethodError) from /var/www/chowlett/dominion_frozen/vendor/rails/actionpack/lib/action_controller/cgi_process.rb:22:in' '__send__' 如果它不相關,請告訴我,我會提出一個新問題。 – Chowlett 2010-08-23 08:24:09

+0

不要緊,這最後似乎是在Debian下的Apache的一個問題,並且沒有使用Passenger。如果需要,我會嘗試通過它並提出一個新問題。 – Chowlett 2010-08-23 09:40:45

0

你的第一個問題是,Rails 2.1.0不使用Rack作爲中間層。

您還需要更改config/environment.rb文件中的rails版本。

另外,根據您使用過的其他寶石,您可能需要返回到與2.1.0一起使用的穩定版本。

個人而言,我會在本地機器上安裝2.1.0用該rails版本創建一個新應用程序,從2.3.5項目中複製應用程序文件夾(當然還有您的單元測試和公共文件夾等,以及看看你是否可以在本地機器上運行2.1.0以上版本,取代gem,在服務器日誌或瀏覽器中回溯失敗,這將比在生產模式下運行更容易,假設你有很好的單元測試來渲染所有的視圖並且彈出你的模型代碼,那麼你應該清除舊版本Rails中不支持的自2.1.0以來添加的任何方法,相當快

+0

謝謝,我將來可能會這樣做。目前,凍結Rack似乎已經到了下一個已知的bug,爲此我需要在我的系統管理員身上微笑地安裝和配置Passenger。 – Chowlett 2010-08-27 18:48:41

相關問題