Выполнение сценария Ruby в приложении Rails

Я могу запустить следующие команды в консоли для моего приложения Rails и импортировать файл CSV в свою базу данных.

require 'csv'

# row will be an array with the fields in the order they appear in the file
CSV.open('myfile.csv', 'r') do |row|
  # assuming the fields in the CSV file are in order npa, nxxFrom, nxxTo, trnk
  # create and save a Trunk model for each row
  Trunk.create!(:npa => row[0], :nxxFrom => row[1], :nxxTo => row[2], :trnk => row[3])
end

Однако я хотел бы облегчить процесс, просто создав для него скрипт. Проблема в том, что я не знаю, как написать скрипт, специфичный для конкретного приложения. Для запуска вышеуказанных команд мне нужно запустить консоль в папке приложения следующим образом:

ruby script/console

Так что просто скопируйте / вставьте команды в файл.rb, и выполнение не будет работать.

Любая помощь всегда будет оценена:)

3 ответа

Решение

Почему бы не использовать script/runner "<code or filename here>? запустить скрипт? Сценарий runner выполняет сценарий в заданном контексте приложения без консоли.

Вы можете сделать это граблями, которые наследуют от среды. Поместите его в lib / tasks / your_task.rake:

task :your_task => :environment do
  # code goes here
end

Затем запустите его, используя rake your_task, Это можно назвать как угодно.

Вам необходимо вызвать среду rails в скрипте.

Попробуйте добавить это вверху вашего файла:

RAILS_ENV = ARGV[0] || "production"
require File.join(File.dirname(__FILE__), *%w[.. config environment])
# assumes script is placed one level below the root of the application
# second parameter is the relative path to the environment directory of your rails app 
Другие вопросы по тегам