Выполнение сценария 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