2010-03-12 65 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'

和运行一个耙宝石:安装

我不知道你是否在不同的环境下运行不同的宝石,如果可能的话。

相关问题