it-swarm.com.ru

Как запустить файл Ruby в среде Rails?

Я хочу запустить файл Ruby в контексте среды Rails. Rails runner почти делает то, что я хочу, но я хотел бы просто дать ему имя файла и аргументы. Я уверен, что это возможно, так как я сделал это раньше. Может кто-нибудь напомнить мне, как это сделать?

89
weicool

Самый простой способ - использовать Rails runner, потому что вам не нужно изменять скрипт.

http://guides.rubyonrails.org/command_line.html#Rails-runner

Просто скажите Rails runner script.rb

109
Ryan Porter

Просто потребуйте environment.rb в вашем скрипте. Если ваш скрипт находится в каталоге script вашего приложения Rails, сделайте

require File.expand_path('../../config/environment', __FILE__)

Вы можете управлять используемой средой (разработка/тестирование/производство), установив переменную среды Rails_ENV при запуске сценария.

Rails_ENV=production Ruby script/test.rb
32
iltempo

Runner выполняет Ruby код в контексте Rails неинтерактивно.

Из команды Rails runner:

Usage: runner [options] ('Some.Ruby(code)' or a filename)

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

    -h, --help                       Show this help message.

Вы также можете использовать runner в качестве строки Shebang для своих сценариев, например:

-------------------------------------------------------------
#!/usr/bin/env /Users/me/Rails_project/script/Rails runner

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

Это старый вопрос, но, на мой взгляд, я часто нахожу полезным создать грабли ... и на самом деле это очень просто.

В lib/tasks/example.rake:

namespace :example do

desc "Sample description you'd see if you ran: 'rake --tasks' in the terminal"
task create_user: :environment do
  User.create! first_name: "Foo", last_name: "Bar"
end

А затем в терминале запустить:

rake example:create_user

Локально это будет выполняться в контексте вашей базы данных разработки, и если она будет запущена в Heroku, она будет работать при подключении к вашей производственной базе данных. Я считаю это особенно полезным, чтобы помочь с миграциями или измененными таблицами.

5
Matt