2013-03-19 37 views
0

概括地说,我有一个包含的Gemfile组依赖

group :assets do 
    gem 'my_gem' 
end 

,取决于:environment,一个Rails初始化需要my_gem rake任务my_rake_task,下面Capistrano的片段一的Gemfile:

task :run_my_rake_task, :roles => :db do 
    run "cd #{release_path} && bundle exec rake RAILS_ENV=#{rails_env} my_rake_task" 
end 

就像现在这样,调用这个Capistrano配方会导致初始化器发出一个错误,指出从my_gem的一个常量不可用。我怎样才能让rake任务拉入:assets组gem或将其他组添加到gemfile中,以便此初始化器停止中断? (请注意,我当然可以只移动my_gem:assets组外,一切工作正常,但是,似乎是便宜的破解答案,我敢肯定是可以避免的。)

回答

0

打开config/application.rb。看看它的顶部。注释掉这一行:

Bundler.require(*Rails.groups(:assets => %w(development test))) 

,并取消本:

Bundler.require(:default, :assets, Rails.env) 

因此,这将载入您的资产组的宝石时,应用程序加载。

但我认为,如果您需要在应用程序的初始化程序中正确使用您的my_gem,那么您需要将其从资产组中移出。

您可以获得关于打捆从这篇文章中分组的更多信息:http://iain.nl/getting-the-most-out-of-bundler-groups

+0

在此基础上与这些线(特别是“取消注释,如果你想在生产延迟加载这一行”),这恰恰不是去评论我想要。不过,我想你可能是对的,但把资产组之外的宝石移动出去可能就是答案... – cbmanica 2013-03-19 19:35:54

+0

jip,只需将宝石放到你需要它的宝石中,然后放入你自己的gemfile – phoet 2013-03-19 19:51:43