【发布时间】:2014-04-08 16:47:10
【问题描述】:
我有一个 Rails 应用程序和一个引擎。
当我的环境/production.rb 中有 config.eager_load=true 时,应用程序崩溃,引擎中出现以下错误
FATAL: ActionView::Template::Error(undefined local variable or method `current_user' for #<#<Class:0x00000005812fe0>:0x00000005811e88>)
/var/www/rack_apps/manager/shared/vendor_bundle/ruby/2.1.0/gems/authorization_engine-0.1.0.SNAPSHOT.20140407182910/app/views/authorization_engine/authorizations/new.html.haml:26:in `__var_www_rack_apps_manager_shared_vendor_bundle_ruby_______gems_authorization_engine_______________________________app_views_authorization_engine_authorizations_new_html_haml__268041456534634533_46121540'
vendor/bundle/ruby/2.1.0/gems/actionpack-4.0.4/lib/action_view/template.rb:143:in `block in render'
vendor/bundle/ruby/2.1.0/gems/activesupport-4.0.4/lib/active_support/notifications.rb:161:in `instrument'
vendor/bundle/ruby/2.1.0/gems/actionpack-4.0.4/lib/action_view/template.rb:141:in `render'
vendor/bundle/ruby/2.1.0/gems/actionpack-4.0.4/lib/action_view/renderer/template_renderer.rb:49:in `block (2 levels) in render_template'
vendor/bundle/ruby/2.1.0/gems/actionpack-4.0.4/lib/action_view/renderer/abstract_renderer.rb:38:in `block in instrument'
vendor/bundle/ruby/2.1.0/gems/activesupport-4.0.4/lib/active_support/notifications.rb:159:in `block in instrument'
vendor/bundle/ruby/2.1.0/gems/activesupport-4.0.4/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
vendor/bundle/ruby/2.1.0/gems/activesupport-4.0.4/lib/active_support/notifications.rb:159:in `instrument'
vendor/bundle/ruby/2.1.0/gems/actionpack-4.0.4/lib/action_view/renderer/abstract_renderer.rb:38:in `instrument'
vendor/bundle/ruby/2.1.0/gems/actionpack-4.0.4/lib/action_view/renderer/template_renderer.rb:48:in `block in render_template'
vendor/bundle/ruby/2.1.0/gems/actionpack-4.0.4/lib/action_view/renderer/template_renderer.rb:56:in `render_with_layout'
vendor/bundle/ruby/2.1.0/gems/actionpack-4.0.4/lib/action_view/renderer/template_renderer.rb:47:in `render_template'
vendor/bundle/ruby/2.1.0/gems/actionpack-4.0.4/lib/action_view/renderer/template_renderer.rb:17:in `render'
vendor/bundle/ruby/2.1.0/gems/actionpack-4.0.4/lib/action_view/renderer/renderer.rb:42:in `render_template'
vendor/bundle/ruby/2.1.0/gems/actionpack-4.0.4/lib/action_view/renderer/renderer.rb:23:in `render'
vendor/bundle/ruby/2.1.0/gems/actionpack-4.0.4/lib/abstract_controller/rendering.rb:127:in `_render_template'
vendor/bundle/ruby/2.1.0/gems/actionpack-4.0.4/lib/action_controller/metal/streaming.rb:219:in `_render_template'
vendor/bundle/ruby/2.1.0/gems/actionpack-4.0.4/lib/abstract_controller/rendering.rb:120:in `render_to_body'
vendor/bundle/ruby/2.1.0/gems/actionpack-4.0.4/lib/action_controller/metal/rendering.rb:33:in `render_to_body'
vendor/bundle/ruby/2.1.0/gems/actionpack-4.0.4/lib/action_controller/metal/renderers.rb:26:in `render_to_body'
但如果我设置 config.eager_load = false,上面的方法似乎也有效
这正常吗? ...我知道您不应该在生产中将 eager_load 设置为 false。有没有办法不急于加载引擎或者我把整个概念弄错了?
我知道它说的是未定义的变量 current_user,但是当我在本地运行时它会完美地拾取它。任何建议或想法都会很棒。谢谢
【问题讨论】:
-
您是否尝试将
:require => false放入主应用程序的 Gemfile 中的引擎。通过这样做,您的 gem 将仅在需要时而不是在启动时加载。 -
这样做会在主应用程序的初始化程序中产生问题(未初始化的常量 {engine name})
-
您希望在哪里定义
current_user?即当您在本地运行时(使用eager_load = false)在哪里定义current_user? -
既然你们都认真对待这个问题(添加赏金等),请考虑创建一个重现错误的最小环境并与我们分享,以便我们可以在发布之前尝试解决方案。跨度>
-
没有源代码很难说你的引擎出了什么问题。
标签: ruby-on-rails ruby-on-rails-4