Rails Engines: Помощники перезагружаются только при перезапуске сервера.
В настоящее время я экспериментирую с движущимися функциями в двигателях. Он работает до сих пор хорошо, но я немного смущен, почему некоторые части двигателя всегда автоматически перезагружаются, когда что-то меняется, а некоторые нет.
В частности, при добавлении вспомогательного метода мне необходимо перезапустить сервер Rails, иначе он не будет отображаться Rails. Это нормальное поведение? Вот соответствующая часть моего движка:
компоненты/iq_list.rb
# encoding: utf-8
require 'iq_list/engine'
# Load IqList Modules
module IqList
extend ActiveSupport::Autoload
autoload :Helpers
autoload :Models
autoload :Controllers
end
компоненты/iq_list/engine.rb
module IqList
class Engine < ::Rails::Engine
end
end
компоненты/iq_list/helpers.rb
module IqList
module Helpers
extend ActiveSupport::Autoload
autoload :IqListHelper
end
end
компоненты/iq_list/хелперы/iq_list_helper.rb
module IqList
module Helpers
module IqListHelper
def some_method
# ...
end
end
end
end
Я все еще очень новичок в машинах, и много кода выше, я взял от кого-то другого, поэтому, пожалуйста, будьте терпеливы со мной. Любой намек в правильном направлении высоко ценится.
Ответы
Ответ 1
Похоже, что вы можете лаять неправильное дерево с помощью двигателей. Если вы пытаетесь просто добиться разделения проблем, вы, вероятно, просто хотите сделать несколько простых старых классов рубинов и вставить их в lib/
(организованным образом, конечно).
Двигатель будет разрабатываться отдельно от вашего "текущего" проекта, вероятно, с помощью драгоценного камня. Изменения в включенных драгоценных камнях потребуют перезапуска вашего сервера AFAIK.
Ответ 2
Если вам нужен код из вашего двигателя, перезагруженный при каждом запросе, вам нужно поместить его в блок to_prepare кода инициализации движка
module IqList
class Engine < ::Rails::Engine
config.to_prepare do
ApplicationController.helper(IqListHelper)
end
end
end
Код в блоке to_prepare гарантированно запускается один раз в процессе производства и каждый раз в разработке.
см. направляющие направляющих, а также
Что означает этот код Rails Engine: config.to_prepare & method (: activate).to_proc
и
http://robots.thoughtbot.com/tips-for-writing-your-own-rails-engine