【问题标题】:Rails: How to explicitly initialize rake tasks "bundled" with a gem?Rails:如何显式初始化与 gem“捆绑”的 rake 任务?
【发布时间】:2014-05-16 14:11:04
【问题描述】:
【问题讨论】:
标签:
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 版本,或者提交一个补丁,这样你就可以在它被接受的情况下回到主分支。