2010-03-12 64 views
4

有一個包含「列表」的應用程序 - 認爲是分類廣告 - 每個列表都有一個標籤列表。生產環境中運行RoR應用程序的問題

當我運行在生產模式下的應用程序下面的代碼會失敗,但在開發模式

uninitialized constant ActiveRecord::Acts::Taggable::InstanceMethods::TagList 
Extracted source (around line #45): 

42:   
43:   <span class="listingIndexTags"> 
44:    Location: [location] | Tags: 
45:    <% tag_list = listing.tag_list %> 
46:    <% if tag_list != nil %> 
47:     <% for tag in tag_list %> 
48:      <%= link_to tag.to_s, { :action => "filter_on", 

我使用開始我的雜種比如在這個測試用例命令行正常工作: Ruby腳本/ server mongrel -e production

默認爲端口3000.我可以在應用中訪問其他視圖請勿調用「listing.tag_list」

「.tag_list」由我在此應用中使用的「acts_as_taggable_on_steroids」提供。它作爲寶石安裝。

也許我的環境文件不通?

這是我的development.rb文件

config.cache_classes = false 

config.whiny_nils = true 

config.action_controller.consider_all_requests_local = true 
config.action_view.debug_rjs       = true 
config.action_controller.perform_caching    = false 

config.action_mailer.raise_delivery_errors = true 

config.action_mailer.delivery_method = :smtp 
config.action_mailer.smtp_settings = { 
    ...took these settings out for this post... 
} 

而且我production.rb文件...

config.cache_classes = true 
config.threadsafe! 

config.action_controller.consider_all_requests_local = false 
config.action_controller.perform_caching    = true 

config.cache_store = :mem_cache_store 

config.action_mailer.raise_delivery_errors = false 

config.action_mailer.delivery_method = :smtp 
config.action_mailer.smtp_settings = { 
    ...took these settings out for this post... 
} 
+0

這幾乎肯定與cache_classes設置有關。要縮小範圍,如果關閉生產中的類緩存會發生什麼情況?另外,你使用的是什麼版本的Rails? –

+0

如果刪除並重建數據庫,則可能會在開發機器上顯示該錯誤。我經常遇到這樣的問題,這是因爲開發數據庫包含的舊條目滿足應用程序的某些需求,但生產數據庫不包含它們,因爲它是新鮮的。有時候隨着應用程序的增長,我們改變代碼的方式是,當數據庫爲空時它會失敗,如果其他所有的失敗都只是一個黑暗的鏡頭。 – stephenmurdoch

+0

另外,你有什麼樣的測試(特別是集成)?如果您的測試足夠並且通過了 – stephenmurdoch

回答

1

FIXED:

好,推遲修復這個bug,直到我絕對必須(今天)後,我終於找到了問題的根源。

包含該行: config.threadsafe!

在我的「production.rb」文件導致它。

I finally found it by: 
    1. Making my production and development environment files identical 
    2. Line-by-line, changing the production environment file until it either: 
     a. The app broke in production mode 
     b. I was back to my original production file 

無論如何,當我需要添加「config.threadsafe!」時線 - IT BROKE!我從來沒有這麼高興有一個應用程序中斷。

所以,爲了解這個選項的作用,結合Mongrel(如果Mongrel甚至是相關的),稍微閱讀一下,我就會得到我的答案。

+0

好的工作。我在這裏遇到同樣的問題。該死的'threadsafe!'從我們嘗試過的舊JRuby部署中設置。 –

0

你有你的生產服務器上安裝的acts_as_taggable_on_steroids寶石?

+0

我是。同樣的事情發生在我的開發機器上,事實證明,當我在「生產」環境中啓動雜種的時候,沒有什麼特別的事情發生在服務器上。 我也在我的environment.rb文件中獲得了'config.gem「acts_as_taggable_on_steroids'行,所以我希望它適用於所有的環境,如果我正確理解的話 – jefflunt

+0

那麼gem列出if你在服務器上運行'gem list'? –

+0

是的,它在那個列表中。 – jefflunt

1

一起來到這裏,同樣的問題,只是想交給了一張字條給每個人都遇到了同樣的....我已經成功地通過此在的environment.rb固定寶石的版本排序這個問題

改變了這種
config.gem 「行爲-AS-可加標籤上」,:源=> 「http://gemcutter.org

這樣:
config.gem 「行爲-AS-可加標籤上」,:源=> 「http://gemcutter.org」,:version =>'2.0.0.rc1'

和運行一個耙寶石:安裝

我不知道你是否在不同的環境下運行不同的寶石,如果可能的話。

相關問題