【发布时间】:2009-05-26 00:42:37
【问题描述】:
当我为使用插件中定义的模型的应用程序运行 rake 任务时,我收到一个未初始化常量错误,但是当我使用脚本/运行器运行模型进程时,它在 rake 任务中被触发,然后作业运行好吗?
加载我所有插件的脚本/运行程序之间是否存在一些差异,当我启动 rake 任务时不会发生,即使它正在传递一个环境?
【问题讨论】:
标签: ruby-on-rails ruby plugins rake
当我为使用插件中定义的模型的应用程序运行 rake 任务时,我收到一个未初始化常量错误,但是当我使用脚本/运行器运行模型进程时,它在 rake 任务中被触发,然后作业运行好吗?
加载我所有插件的脚本/运行程序之间是否存在一些差异,当我启动 rake 任务时不会发生,即使它正在传递一个环境?
【问题讨论】:
标签: ruby-on-rails ruby plugins rake
您的 rake 任务需要依赖于 :environment。这将启动您的应用程序环境并让您访问您的模型等。
例如
desc "Make DB Views"
task :views => [:environment] do |t|
# your task's code
end
【讨论】:
您需要指定您的 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 文件的开头,在一些初始化代码中?如果是这样,那么它将失败,因为插件仅在任务执行时(加载环境时)才被加载。
希望这会有所帮助。
【讨论】: