【问题标题】:Are plugins available to a rake task?插件可用于 rake 任务吗?
【发布时间】:2009-05-26 00:42:37
【问题描述】:

当我为使用插件中定义的模型的应用程序运行 rake 任务时,我收到一个未初始化常量错误,但是当我使用脚本/运行器运行模型进程时,它在 rake 任务中被触发,然后作业运行好吗?

加载我所有插件的脚本/运行程序之间是否存在一些差异,当我启动 rake 任务时不会发生,即使它正在传递一个环境?

【问题讨论】:

    标签: ruby-on-rails ruby plugins rake


    【解决方案1】:

    您的 rake 任务需要依赖于 :environment。这将启动您的应用程序环境并让您访问您的模型等。

    例如

    desc "Make DB Views"
    task :views => [:environment] do |t|
    # your task's code
    
    end
    

    【讨论】:

    • 事情就是这样,我们确实有环境以这种方式传递,这就是它如此奇怪的原因。
    【解决方案2】:

    您需要指定您的 Rake 任务需要加载环境:

    task :your_task => :environment do |t| ...
    

    task :your_task => [:environment] do |t| ...
    

    task :your_task, :param1, :param2, :needs => :environment do |t, args| ...
    

    task :your_task, :param1, :param2, :needs => [:environment] do |t, args| ...
    

    如果您确实指定了这一点,那么还有另一个问题。我认为一个常见的错误来源是由于插件加载在名为Rails::Plugin 的命名空间内。因此,如果您在插件中定义了一个名为 Foo 的类,则 Rake 任务需要将其引用为 Rails::Plugin::Foo 而不是简单的 Foo

    如果这不能解决您的问题,请尝试在插件的init.rb 文件的第一行添加puts "Check",并确保在您运行rake 任务时显示Check。如果是,那么您的插件正在加载,但之后可能会静默失败。

    最后一件事:也许你正试图在任务之外使用插件,例如在你的 Rake 文件的开头,在一些初始化代码中?如果是这样,那么它将失败,因为插件仅在任务执行时(加载环境时)才被加载。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多