我尝试将我的脚本放在从我的模型继承的类中,如下所示:
class ScriptName < MyModel
但是当我rake my_script
在命令行运行时,我得到了这个错误:
rake aborted!
uninitialized constant MyModel
我究竟做错了什么?
另外,我应该命名我的文件my_script.rb
还是my_script.rake
?
我尝试将我的脚本放在从我的模型继承的类中,如下所示:
class ScriptName < MyModel
但是当我rake my_script
在命令行运行时,我得到了这个错误:
rake aborted!
uninitialized constant MyModel
我究竟做错了什么?
另外,我应该命名我的文件my_script.rb
还是my_script.rake
?
只需要文件。我在我的一项 rake 任务(我命名my_script.rake
)中执行此操作
require "#{Rails.root.to_s}/app/models/my_model.rb"
这是一个完整的例子
# lib/tasks/my_script.rake
require "#{Rails.root.to_s}/app/models/video.rb"
class Vid2 < Video
def self.say_hello
"Hello I am vid2"
end
end
namespace :stuff do
desc "hello"
task :hello => :environment do
puts "saying hello..."
puts Vid2.say_hello
puts "Finished!"
end
end
但更好的设计是让 rake 任务简单地调用一个辅助方法。好处是更容易扫描可用的 rake 任务,更容易调试,并且 rake 任务运行的代码变得非常可测试。例如,您可以添加一个rake_helper_spec.rb
文件。
# /lib/rake_helper.rb
class Vid2 < Video
def self.say_hello
"Hello I am vid2"
end
end
# lib/tasks/myscript.rake
namespace :stuff do
desc "hello"
task :hello => :environment do
Vid2.say_hello
end
end
我要做的就是把我的要求放在任务规范之上,然后:environment
像这样声明标志:
task :my_script => :environment do
#some code here
end
仅仅通过这样做,我就可以访问我所有的模型。我不需要,require 'active_record'
甚至require
我的模型。
只需指定环境,我的所有模型都可以访问。
我也遇到了 Nokogiri 的问题,我所做的只是将它从文件顶部删除为 arequire
并将其添加到我的 Gemfile 中。