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