2015-06-02 2 views
1

У меня есть следующая необходимость.Запустите скрипт, который использует мои модели

У меня есть веб-приложение Rails. Мне нужно написать скрипт, который будет читать файл excel, и вызвать методы моей модели для заполнения базы данных.

Это не проблема.

Я просто интересно:

Есть ли что-то немного напоминает seed.rb, где я могу просто запустить .RB файл, и он будет просто сделать изменения?

как: rails runmyfile myfile.rb

Этот файл будет читать таблицу и ввести данные. Я бы использовал seed.rb, но это не позволит мне добавлять вещи во время работы сервера.

+0

Как часто вам нужно это делать? Возможно, стоит создать задание, если вы где-нибудь вытаскиваете файлы Excel. В противном случае рейк, вероятно, отлично работает для чего-то подобного. – locoboy

ответ

5

Попробуйте создать rake задачу для него. Тогда просто

rake my_tasks:task_name 

Более подробную информацию о пользовательских rake задач можно найти here

0

Да rails runner - это то, что вы ищете.

$ bin/rails runner -e staging myfile.rb 

Прочитайте Usuage из консоли:

$ bin/rails runner 
Usage: rails runner [options] [<'Some.ruby(code)'> | <filename.rb>] 

    -e, --environment=name   Specifies the environment for the runner to operate under (test/development/production). 
            Default: development 

    -h, --help      Show this help message. 

Examples: 
    rails runner 'puts Rails.env' 
     This runs the code `puts Rails.env` after loading the app 

    rails runner path/to/filename.rb 
     This runs the Ruby file located at `path/to/filename.rb` after loading the app 

You can also use runner as a shebang line for your executables: 
    ------------------------------------------------------------- 
    #!/usr/bin/env /Users/xxx/rails/app/bin/rails runner 

    Product.all.each { |p| p.price *= 2 ; p.save! } 
    ------------------------------------------------------------- 
0

Вы ищете rails runner, который проходит любой скрипт на Ruby в среде рельсы, предоставляя доступ к моделям и т.д.

$ echo 'puts "hi"' > test.rb 
$ rails runner test.rb 
hi 

Или запустите небольшой фрагмент непосредственно из командной строки.

$ rails runner 'puts "hi"' 
hi 
0

Я использую рельсы runner для этой цели. Линейщик выполняет фрагмент кода напрямую, но с полноценной средой рельсов. Если вы хотите запустить скрипт (предполагается, что ваш скрипт находится в «Lib/myscript.rb»), в рельсах-среде, а затем запустить:

rails runner lib/myscript.rb 

Если вы хотите, чтобы запустить сценарий в конкретной среде, затем использовать -e параметра:

rails runner -e development lib/myscript.rb 
0

Вы можете сделать что-то подобное с библиотекой CSV и включить его в реках задачу:

desc "add models from csv file" 
task :add_csv_models => :environment do 
    require 'csv' 
    CSV.foreach('path/to/your_file.csv') do |row| 
    mod = YourModel.new(attribute_1: row[0], attribute_2: row[1]) 
     if mod.save 
     printf "\nModel Saved" 
     else 
     # handle exception here 
     end 
    end 
end 

затем запустить грабли: add_csv_models Вам нужно будет настроить атрибуты и индексы строк, но это должно дать вам общую идею.

Смежные вопросы