Ruby on rails 如何从Rails 3应用程序的/lib/文件夹中的ruby脚本中访问我的一个模型?
我尝试将脚本放入从模型继承的类中,如下所示:Ruby on rails 如何从Rails 3应用程序的/lib/文件夹中的ruby脚本中访问我的一个模型?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我尝试将脚本放入从模型继承的类中,如下所示: class ScriptName < MyModel 我做错了什么 另外,我应该将我的文件命名为my_script.rb还是my_script.rake?只需要该文件。我在我的一个rake任务(我将其命名为my_script.rake)中执行此操作 这里有一个完整的例子 # lib/tasks/my_script.rake require "#{Rails.root.to_s}/app/models/video.rb" class Vid
class ScriptName < MyModel
我做错了什么
另外,我应该将我的文件命名为
my_script.rb
还是my_script.rake
?只需要该文件。我在我的一个rake任务(我将其命名为my_script.rake
)中执行此操作
这里有一个完整的例子
# 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
我所要做的就是将我的需求置于任务规范之上,然后只需声明
:environment
标志,如下所示:
task :my_script => :environment do
#some code here
end
通过这样做,我可以访问我所有的模型。我不需要要求“活动记录”
甚至要求我的型号
只是指定了环境,我的所有模型都可以访问
我也遇到了Nokogiri的问题,我所做的只是将它作为要求从文件顶部删除,并将其添加到我的Gemfile中。你到底想完成什么?我有一个ruby脚本,我想在cron作业上运行,它将完成一些需要30分钟的任务。我知道我最终会使用rake任务来执行脚本,我可能会在cron作业中使用每当gem,然后使用延迟作业或重新创建或类似的方法将工作放入后台队列。但是,现在…我要做的只是从这个文件中访问我的模型(这样我就可以读取和写入我的数据库)。想法?既然它是name.rake
,那么我是否需要重新编写它,使其看起来像一个“普通”的rake文件?或者我可以把它作为一个“普通”的ruby文件吗?如我的示例所示,纯ruby很好。这是一个有效的例子。我想你已经一针见血了,我现在的问题是让它为我的剧本工作。我的脚本比这个复杂一点,所以跟踪失败是一件痛苦的事。顺便说一句,在这种情况下,Video.create(:some_data=>data)
可以工作吗?这是我试图工作的脚本(以及错误日志)-有什么想法吗?
# 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
# /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
task :my_script => :environment do
#some code here
end