【问题标题】:ActiveView::Template::Error ( uninitialized constant CustomBreadcrumbsBuilder )ActiveView::Template::Error(未初始化的常量 CustomBreadcrumbsBuilder )
【发布时间】:2016-09-10 10:55:00
【问题描述】:

我正在使用一个名为 breadcrumbs_on_rails 的 gem,为了使用这个 gem 的视图,我在我的 lib/ 目录中创建了一个名为:CustomBreadcrumbsBuilder 的类:

class CustomBreadcrumbsBuilder < BreadcrumbsOnRails::Breadcrumbs::Builder
  def render
    @context.render "/layouts/breadcrumbs", elements: @elements
  end
end

我在application.html.haml 文件中使用这个类以如下方式呈现布局:

%main
  = render_breadcrumbs builder: ::CustomBreadcrumbsBuilder

它在开发环境中成功加载文件,但在生产中,它产生以下错误:

ActionView::Template::Error (uninitialized constant CustomBreadcrumbsBuilder):

我尝试了以下方法:

在我的config/application.rb 中添加了以下内容:

config.autoload_paths += %W(#{config.root}/lib/)

config.autoload_paths << "#{Rails.root}/lib"

但没有任何工作。同样,它在开发模式下工作,但在生产中失败。

我使用的是 Rails 5.0.0 和 ruby​​ 2.2.3,在生产中,我使用 Puma 和 Nginx 来处理请求。

【问题讨论】:

  • 你重启过生产 Rails 服务器了吗?
  • @max 没问题。不止一次。
  • 你能在生产服务器上运行bin/rails r 'puts ActiveSupport::Dependencies.autoload_paths'吗?
  • config.autoload_paths += %W(#{config.root}/lib/)config.autoload_paths &lt;&lt; "#{Rails.root}/lib" 在语义上不同,但应该产生相同的结果。两者都只是将元素附加到数组中。
  • @max 是的,它列出了:/home/deploy/iitan/lib

标签: ruby-on-rails ruby ruby-on-rails-5


【解决方案1】:

我仍然不知道确切的答案,但我认为 autoload_paths 是在加载视图文件后加载的,因此 Rails 无法找到在 application.html.haml 中使用并在 lib/ 目录中定义的常量。所以我使用了以下内容:

config.eager_load_paths += %W(#{config.root}/lib/)

毫无疑问,它现在正在运行。

我发现的另一个解决方案是直接在视图文件中要求相应的文件,就像我在 application.html.haml 中添加了以下行:

require '/home/arslanali/personalproject/lib/custom_breadcrumbs_builder.rb'

它也奏效了。

猜你喜欢
  • 2014-04-28
  • 1970-01-01
  • 2013-11-13
  • 2011-09-06
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
相关资源
最近更新 更多