【问题标题】:rails: NoMethodError in production onlyrails: NoMethodError 仅在生产中
【发布时间】:2011-06-30 02:30:24
【问题描述】:

我在编程的第 12 个小时,所以我可能忽略了一些简单的事情,但是关于这个问题有什么建议吗?

在我的 app_helper 中,我添加了一个带有 haml 的红地毯过滤器模块

module Haml::Filters::Redcarpet
  include Haml::Filters::Base
  include ActionView::Helpers::TagHelper

  def render(text)
    options = [:autolink, :smart, :hard_wrap, :no_intraemphasis]
    content_tag(:div, Redcarpet.new(text.to_s, *options).to_html.html_safe, :class => "markup" )
  end
end

在开发中效果很好。但在生产中,它正在抛出

[ !EXCEPTION! ] NoMethodError: undefined method 'content_tag' for Haml::Filters::Redcarpet:Module

为什么会这样?或者我可以检查什么?我什至在生产环境中运行控制台,并且能够包含 TagHelper 并使用这些方法。不解……

【问题讨论】:

  • 请同时发布您的 /config/environments/production.rb 和 development.rb 文件 - 两个环境之间可能存在差异,从而导致问题。
  • 我用 2 个配置做了一个馅饼。 pastie.org/2142973
  • 另外,开发环境是 OSX/WEBrick,生产环境是 Debian/Passenger
  • 开发机器和生产机器上的 Rails 版本是否相同?
  • 所以我将 cache_classes 设置为 false,现在它可以工作了。为什么缓存我的类会阻止包含该助手?

标签: ruby-on-rails haml production-environment


【解决方案1】:

我的猜测是,您的生产环境中的一个或多个 gem 的版本与您的开发环境不同。在两者中执行“gem list”并将结果添加到您的原始帖子中。

避免此问题的最佳方法是使用 Ruby 版本管理器 (RVM) 和“捆绑器”gem:您可以创建特定于项目的 gemset,从而确保两个版本的 gem 完全相同( prod & dev) 的项目。

rvm:https://rvm.io

打包者:http://gembundler.com/

哦 - 如果您查看堆栈跟踪,您可能会看到对设置 haml/redcarpet 东西的 gem 的引用,这可能是罪魁祸首,即具有不同的版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 2012-06-10
    • 2013-09-04
    • 1970-01-01
    相关资源
    最近更新 更多