可以访问Rails模型的Ruby脚本

我在哪里以及如何运行使用我的rails环境的简单脚本。 具体来说,我有一列包含多条信息,我现在为每条信息添加了列,需要运行一个ruby脚本,可以运行以调用数据库每一行的方法来推断数据并将其保存到新专栏。

我必须在这里同意大卫的意见。 为此使用迁移。 我不确定你想做什么,但是从环境中运行它比使用手动加载应用程序环境高效得多 。 由于您的初始post建议您只执行一次,因此迁移是可行的方法:

rails g migration MigrateData

..生成:

 class MigrateData < ActiveRecord::Migration def self.up # Your migration code here end def self.down # Rollback scenario end end 

当然,您总是希望首先使用一些测试数据在本地执行此操作。

如果我了解您的用例,使用迁移听起来是正确的方法。

但是,如果您确实想要编写需要访问Rails应用程序模型的独立脚本,则可以从独立脚本中获取environment.rb文件。

例:

 #!/bin/env ruby ENV['RAILS_ENV'] = "production" # Set to your desired Rails environment name require '/path/to/railsapp/config/environment.rb' # After this point you have access to your models and other classes from your Rails application model_instance = MyModel.find(7) model_instance.some_attribute = "new value" model_instance.save 

同意每个人,对于这个特定的情况,听起来像迁移将是有条不紊的,但是,要定期执行此操作,或编写一些其他任务/脚本来交互rails应用程序环境make rails为您生成rake任务! 这可以通过rails应用程序保存,并且可以一次又一次地运行:)

生成与rails app / models交互的rake任务的最简单方法是让Rails为你生成Rake任务! 🙂

这是一个例子

  1. 运行rails g task my_namespace my_task

  2. 这将生成一个名为lib/tasks/my_namespace.rake的文件,如下所示:

 namespace :my_namespace do desc "TODO: Describe your task here" task :my_task1 => :environment do #write any ruby code here and also work with your models puts User.find(1).name end end 
  1. 使用rake my_namespace:my_task运行此任务

  2. 观察与rails modal运行交互的ruby代码任务!

播种数据:

http://railscasts.com/episodes/179-seed-data

使用迁移添加数据

http://railscasts.com/episodes/23-counter-cache-column

使用Rake任务

http://railscasts.com/episodes/66-custom-rake-tasks

我更喜欢使用迁移来添加一些数据。

如果是一次性的事情,请使用迁移。

如果这是需要多次执行的操作,请使用rake任务。