当我为使用插件中定义的模型的应用程序运行rake任务时,我得到一个未初始化的常量错误,但是当我使用脚本/ runner在rake任务中触发模型进程时,作业运行正常?插件是否可用于rake任务?
加载所有插件的script/runner是否存在一些差异?当我启动rake任务时,即使它正在传递一个环境,它也不会发生?
当我为使用插件中定义的模型的应用程序运行rake任务时,我得到一个未初始化的常量错误,但是当我使用脚本/ runner在rake任务中触发模型进程时,作业运行正常?插件是否可用于rake任务?
加载所有插件的script/runner是否存在一些差异?当我启动rake任务时,即使它正在传递一个环境,它也不会发生?
您的耙子任务需要依赖于:环境。这将旋转你的应用程序的环境,让您将模型接入等
如
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
。
如果这不能解决你的问题,然后尝试添加puts "Check"
对插件的init.rb
文件的第一行,并确保当您运行rake任务Check
显示。如果是这样,那么你的插件正在被加载,但也许它在那之后默默地失败。
最后一件事:也许你正试图在任务外使用插件,例如在你的Rake文件的开头,在一些初始化代码中?如果是这样,那么它将失败,因为只有当任务执行时(当环境被加载时)才会加载插件。
希望这会有所帮助。
尽管如此,我们确实已经以这种方式传递了环境,这就是让它如此奇怪的原因。 – nitecoder 2009-05-26 01:22:49