2010-08-21 1 views
6

По http://edgeapi.rubyonrails.org/classes/Rails/Railtie.html, если я пишу плагин Rails 3, и я хочу, чтобы вклиниться в процесс инициализации, я пишуДобавить шаг инициализации Rails 3 процесса загрузки только в режиме сервера

class MyRailtie < Rails::Railtie 
    initializer "my_railtie.configure_rails_initialization" do 
    # some initialization behavior 
    end 
end 

Однако появляется этот инициализатор для выполнения, например, задачи Rails rake, а не только при запуске rails s или аналогичных. Мой вопрос в том, как я могу запретить запуск моего кода в этом блоке во время задач Rails, в отличие от полных загрузок сервера Rails? Это, по-видимому, общая проблема с плагинами Rails 3.

ответ

0

Путь назад, когда я разместил этот вопрос, Mongoid испытывал эту проблему. Я сообщил об этом here, и он был разрешен путем переноса кода в блок config.after_initialize. Если Rails не инициализирован, этот блок никогда не вызывается. Дополнительная информация here.

+0

Это не работает для меня, независимо от того, какой код я вставлял в config.after_initialize, вызывается даже в режиме консоли или в режиме грабли – Alex

+0

Хм, вы используете тот же стиль, что и в [Mongoid's railtie.rb] (https: // github. ком/Mongoid/Mongoid/BLOB/Master/Библиотека/Mongoid/railtie.rb)? С 'config.after_initialize' вложенным внутри блока' initializer'? –

+0

Я поместил блок config.after_initialize в свой application.rb, но код, кажется, запускается каждый раз, независимо от того, запущен ли он рельсами c или рельсами s или даже простой rake – Alex

4

добавить этот блок к вашему инициализаторе:

if defined?(Rails::Server) 
    # do something 
end 

это должно работать с текущей 3.0.6 Рельсы версии.

+0

Хм, не могли бы вы сказать больше об обстоятельствах, под которыми определяется «Rails :: Server»? Я не видел никаких плагинов, которые используют это. –

+0

Это замечательно, но, похоже, он не работает с Heroku? Любые альтернативы? – Alex

+0

Мне нужно было что-то использовать в нашей среде разработчиков, чтобы запустить некоторые службы, но только при запуске в режиме сервера, через исходный код рельсов, этот объект загружается при запуске сервера rails. – dudemeister