2014-04-08 33 views
2

我有一個Rails應用程序和一個引擎。當config.eager_load = true時Rails應用程序崩潰

,當我在我的環境已config.eager_load =真/ production.rb應用程序崩潰給下面的錯誤在發動機

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,但它完美地撿起來,當我在本地運行。任何建議或想法將真棒.Thanks

+0

您是否曾嘗試將:require => false添加到主應用程序的Gemfile中的引擎中。通過這樣做,您的寶石將只在需要時加載,而不是在啓動時加載。 – VAIRIX

+2

這樣做會在主應用程序的初始化程序中產生問題(未初始化的常量{引擎名稱}) – kauschan

+0

您期望在哪裏定義'current_user'?即當你在本地運行時('eager_load = false')定義的'current_user'在哪裏? –

回答

0

http://edgeguides.rubyonrails.org/configuring.html

官方文件說: config.eager_load時真,渴望加載所有註冊config.eager_load_namespaces。這包括你的應用程序,引擎,Rails框架和任何其他註冊的命名空間。

要正確回答這個問題,我們需要知道你在會議中使用什麼,例如設計寶石或其他東西。但是我猜你會使用一些gem,如果你在本地說你的應用程序運行沒有錯誤,那麼你的gem版本在本地和服務器上可能有區別嗎?你可以更新寶石,它打破了一些例如。所以我建議你從這開始。