![](/img/trans.png)
[英]How do I run a ruby script, that I put in my /lib/tasks/ directory in my Rails app, once?
[英]How do I access one of my models from within a ruby script in the /lib/ folder in my Rails 3 app?
我尝试将我的脚本放在从我的模型继承的类中,如下所示:
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的问题,我所做的就是从我的文件顶部删除它作为一个require
并将其添加到我的Gemfile中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.