【问题标题】:Rails: How to explicitly initialize rake tasks "bundled" with a gem?Rails:如何显式初始化与 gem“捆绑”的 rake 任务?
【发布时间】:2014-05-16 14:11:04
【问题描述】:

sprockets gem 附带一些rake 任务,这些任务由rails 自动加载。

The initialise method of that task file 可以接受一个参数(任务的命名空间,默认为 assets),但由于它是自动加载的,因此无法实际给出该参数。

什么是在我的应用程序中显式加载这些捆绑的 rake 任务以便我可以给出参数的干净方法?

【问题讨论】:

    标签: ruby-on-rails rake sprockets


    【解决方案1】:

    没有干净的方法可以做到这一点。您可以通过查看 sprockets-rails gem 来了解这一点,它为 Rails 应用程序初始化 sprockets。任务被添加到该 gem 的 lib/sprockets/railtie.rb 中,其中 L60-61(在 v2.0.1 中)是:

    require 'sprockets/rails/task'
    Sprockets::Rails::Task.new(app)
    

    如果我们查看lib/sprockets/rails/task,我们会看到:

    class Task < Rake::SprocketsTask
      attr_accessor :app
    
    def initialize(app = nil)
      self.app = app
      super()
    end
    

    这就是您在问题中引用的 initialize 方法在 Rails 应用程序初始化时被调用的地方。如您所见,没有参数传递给super,因此SprocketsTask 将使用默认参数进行初始化。显然,如果没有猴子补丁,你就无法传递参数。如果这是你真正需要的东西,我建议你 fork sprockets-rails 或者只使用你的 fork 版本,或者提交一个补丁,这样你就可以在它被接受的情况下回到主分支。

    【讨论】:

      猜你喜欢
      • 2011-10-11
      • 1970-01-01
      • 2013-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      相关资源
      最近更新 更多