Руби по рельсам, запусти метод при запуске сервера 2.3 - PullRequest
3 голосов
/ 25 сентября 2010

Я хочу запустить метод при запуске сервера rails.Это метод модели.

Я пытался использовать config / initializers / myfile.rb, но метод был вызван во время миграции, поэтому он ВЫБЕРИЛ из несуществующей таблицы.

Также пробовал environment.rb,но класс еще не существует (и, вероятно, будет иметь ту же проблему с миграциями)

Я не знаю, куда поместить этот метод, поэтому он будет работать только при запуске сервера, а не во время миграции.

Ответы [ 4 ]

3 голосов
/ 25 сентября 2010

Есть некоторые вещи, которые вы могли бы сделать, чтобы немного улучшить это. Проблема в том, что вы запускаете этот код, когда rake загружает вашу среду, но вы действительно хотите запускать его только тогда, когда среда загружается экземпляром вашего веб-сервера. Один из способов обойти это - установить значение, когда rake загружает вашу среду, и когда это значение установлено, чтобы не выполнять код инициализатора. Вы можете сделать это следующим образом:

task :environment => :disable_initializer

task :disable_initializer do
   ENV['DISABLE_INITIALIZER_FROM_RAKE'] = 'true'
end

#In your initializer:

ENV['DISABLE_INITIALIZER_FROM_RAKE'] || MyModel.method_call
2 голосов
/ 25 сентября 2010

Нет способа избежать этого из моего понимания.Вы можете поместить код инициализатора, который опирается на новую таблицу, в блок восстановления, чтобы успокоить ситуацию, чтобы другие могли запускать миграции.

1 голос
/ 25 сентября 2010

Попробуйте поместить вызов метода в boot.rb, в метод run после вызова Rails :: initializer. У меня сейчас нет рельсов, потому что я на работе, но я думаю, что к этому моменту должна быть загружена вся среда, и вы можете запускать методы на платформе.

0 голосов
/ 04 марта 2011

Я нашел, что это работает довольно хорошо:

if File.basename ($ 0) == "rails" && ARGV == []

Он также обнаруживает "рельсы генерируют .."

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