Ruby on rails 在生产环境中运行RoR应用程序时出现问题

Ruby on rails 在生产环境中运行RoR应用程序时出现问题,ruby-on-rails,mongrel,production-environment,Ruby On Rails,Mongrel,Production Environment,有一个有“列表”的应用程序——想想分类广告——每个列表都有一个标签列表 以下代码在我以生产模式运行应用程序时失败,但在开发模式下工作正常 uninitialized constant ActiveRecord::Acts::Taggable::InstanceMethods::TagList Extracted source (around line #45): 42: 43: <span class="listingIndexTags"> 44:

有一个有“列表”的应用程序——想想分类广告——每个列表都有一个标签列表

以下代码在我以生产模式运行应用程序时失败,但在开发模式下工作正常

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",
还有我的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...
}

您的生产服务器上是否安装了“作为类固醇的标签”gem?

已修复:

好吧,在把修复这个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!”行时,它断了!我从来没有这么高兴有一个应用程序中断


所以,读一点书来了解这个选项与Mongrel(如果Mongrel是相关的)结合起来到底做了什么,我会有我的答案。

带着同样的问题来到这里,只是想给每个遇到同样问题的人一个提示……我通过在environment.rb中修复gems的版本,成功地解决了这个问题

改变了这个
config.gem“在上充当标记的角色”,:source=>“”

对此:
config.gem“充当“,:source=>”,:version=>“2.0.0.rc1”上的标记

并运行rake gems:install


我想知道你是否在不同的环境中运行了不同的gems,如果可能的话

这几乎肯定与cache_类设置有关。要缩小范围,如果在生产环境中关闭类缓存会发生什么?此外,您使用的是什么版本的Rails?如果您删除并重建数据库,则错误可能会出现在开发计算机上。我经常遇到这样的问题,这是因为开发数据库包含满足应用程序特定需求的旧条目,而生产数据库不包含它们,因为它是新的。有时,随着应用程序的增长,我们会修改代码,使其在数据库为空时失败。。。如果所有其他测试都失败了,那就只是一次冒险。另外,你有什么样的测试(特别是集成测试)?如果您的测试充分且有效,则不需要上述建议passing@Randy:我已尝试关闭类缓存,并在生产模式下重新启动Mongrel。症状没有变化。@Stephen:我实际上复制了我的sqlite3数据库,并将其粘贴为“production.sqlite3”,因此在本例中,数据库是相同的。也许这也是我的问题的一部分——直接复制数据库,可能是一个很大的禁忌?回答你的测试问题,你完全正确。我没有测试覆盖这一点——事实上,此时的integration_tests.size==0——我是一个非常糟糕的开发人员。所以我需要写它们,并修复它。作为旁注,关于复制数据库还有其他意见吗?我有。事实证明,当我在“生产”环境中启动mongrel时,在我的开发机器上也会发生同样的事情,因此没有特定于服务器的内容。我还有'config.gem'“在我的environment.rb文件中的类固醇行中充当标记,因此如果我理解正确,我希望它适用于所有环境。如果在服务器上运行
gem list
,gem也会列出吗?做得好。我也有同样的问题。该死的
线程安全我们尝试的旧JRuby部署中的设置。
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