2009-05-26 43 views
0

当我为使用插件中定义的模型的应用程序运行rake任务时,我得到一个未初始化的常量错误,但是当我使用脚本/ runner在rake任务中触发模型进程时,作业运行正常?插件是否可用于rake任务?

加载所有插件的script/runner是否存在一些差异?当我启动rake任务时,即使它正在传递一个环境,它也不会发生?

回答

1

您的耙子任务需要依赖于:环境。这将旋转你的应用程序的环境,让您将模型接入等

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

end 
+0

尽管如此,我们确实已经以这种方式传递了环境,这就是让它如此奇怪的原因。 – nitecoder 2009-05-26 01:22:49

0

你需要指定你的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文件的开头,在一些初始化代码中?如果是这样,那么它将失败,因为只有当任务执行时(当环境被加载时)才会加载插件。

希望这会有所帮助。