我正在使用一个名为breadcrumbs_on_rails的gem,并且为了使用这个gem的视图,我在我的lib/目录中创建了一个名为:CustomBreadcrumbsBuilder的类作为fellows:
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来满足请求。
发布于 2016-09-11 05:22:56
我仍然不知道确切的答案,但我认为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'而且它也起作用了。
https://stackoverflow.com/questions/39425319
复制相似问题