Ruby on Rails: как я могу указать среду runner script

Я использую оболочку script для запуска некоторых сценариев бегунов в моем приложении Ruby on Rails. Мне нужно запустить его в производственной базе данных, но следующее:

#!/bin/bash
/usr/bin/ruby RAILS_ENV=production ../script/runner ../lib/tasks.rb 

дает ошибку:

/usr/bin/ruby: No such file or directory -- RAILS_ENV=production (LoadError)

Я попытался заставить его в config/environment.rb

ENV['RAILS_ENV'] ||= 'production'

или даже

ENV['RAILS_ENV'] = 'production'

но даже с тем, что он все еще работает в среде разработки.

Обновление: я могу заставить скрипты подключиться к нужной базе данных, отредактировав файл config/database.yml, но мне интересно, как правильно это сделать.

Ответ 1

Справка в командной строке для script/runner дает вам свой ответ.

script/runner -e production Model.method

Ответ 2

Если ваша команда, порядок ваших аргументов является вашей самой большой проблемой.

/usr/bin/ruby RAILS_ENV=production ../script/runner ../lib/tasks.rb

Отличается от.

/usr/bin/ruby ../script/runner ../lib/tasks.rb RAILS_ENV=production

Второй пример - поиск файла, первый - установка переменной времени выполнения, в то время как ruby ​​интерпретирует ее как файл, который вы хотите запустить.

Ответ 3

Если вы переделаете свой script следующим образом:

#!/bin/bash
RAILS_ENV=production
/usr/bin/ruby ../script/runner ../lib/tasks.rb

..., который заставит его придерживаться времени жизни script. Чтобы заставить его придерживаться времени жизни сеанса оболочки, измените его на

#!/bin/bash
export RAILS_ENV=production
/usr/bin/ruby ../script/runner ../lib/tasks.rb

Ответ 4

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

RAILS_ENV=production /usr/bin/ruby ../script/runner ../lib/tasks.rb

Ответ 5

RAILS_ENV=production script/rails runner 'user = User.find(:first, :conditions => {:admin => true}) ; user.password, user.password_confirmation = "mypasswd"; user.save!'

это сработало для меня