【问题标题】:Gemfile group dependenciesGemfile 组依赖项
【发布时间】:2013-03-19 18:46:40
【问题描述】:

简而言之,我有一个 gemfile,其中包含

group :assets do
  gem 'my_gem'
end

,一个依赖于 :environment 的 rake 任务 my_rake_task,一个需要 my_gem 的 Rails 初始化程序,以及以下 Capistrano sn-p:

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 组 gems 或将另一个组添加到 gemfile 以便这个初始化程序停止破坏? (请注意,我当然可以将my_gem 移到:assets 组之外,一切正常,但这似乎是我确信可以避免的廉价黑客答案。)

【问题讨论】:

    标签: ruby-on-rails ruby rake capistrano gemfile


    【解决方案1】:

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

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

    并取消注释:

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

    因此它会在应用加载时加载您的资产组 gem。

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

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

    【讨论】:

    • 基于与这些行一起使用的 cmets(尤其是“如果您想在生产中延迟加载,请取消注释此行”),这完全不是我想要的。不过,我想您可能是对的,毕竟将 gem 移到资产组之外可能是答案......
    • jip,只需将 gem 放入您需要的组中,以便在您自己的 gemfile 中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 2012-07-03
    相关资源
    最近更新 更多