Ответ 1
Справка в командной строке для script/runner дает вам свой ответ.
script/runner -e production Model.method
Я использую оболочку 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, но мне интересно, как правильно это сделать.
Справка в командной строке для script/runner дает вам свой ответ.
script/runner -e production Model.method
Если ваша команда, порядок ваших аргументов является вашей самой большой проблемой.
/usr/bin/ruby RAILS_ENV=production ../script/runner ../lib/tasks.rb
Отличается от.
/usr/bin/ruby ../script/runner ../lib/tasks.rb RAILS_ENV=production
Второй пример - поиск файла, первый - установка переменной времени выполнения, в то время как ruby интерпретирует ее как файл, который вы хотите запустить.
Если вы переделаете свой 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
Вы можете установить переменную окружения следующим образом:
RAILS_ENV=production /usr/bin/ruby ../script/runner ../lib/tasks.rb
RAILS_ENV=production script/rails runner 'user = User.find(:first, :conditions => {:admin => true}) ; user.password, user.password_confirmation = "mypasswd"; user.save!'
это сработало для меня