可以访问Rails模型的Ruby脚本

Rab*_*ott 5 scripting ruby-on-rails

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

ctc*_*rry 7

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

但是,如果您确实想要编写需要访问Rails应用程序模型的独立脚本,则可以从独立脚本中获取requireenvironment.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
Run Code Online (Sandbox Code Playgroud)


Jaa*_*ans 6

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

rails g migration MigrateData

..生成:

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

  def self.down
    # Rollback scenario
  end
end
Run Code Online (Sandbox Code Playgroud)

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


Sha*_*nak 5

与每个人都同意,对于这种特定情况,听起来迁移是一个可行的方法,但是,要定期执行此操作,或者编写其他与Rails应用程序环境交互的任务/脚本,使Rails为您生成rake任务!这将保存在您的rails应用程序中,并且可以一次又一次地运行:)

生成与Rails应用程序/模型交互的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
Run Code Online (Sandbox Code Playgroud)
  1. 使用以下命令运行此任务 rake my_namespace:my_task

  2. 观看与rails模态运行交互的ruby代码任务!