Вам необходимо поместить свой код module_eval в блок config.to_prepare do
.Самый простой способ сделать это - config/application.rb
или создать движок.Код идентичен, за исключением того, что он выполняется каждый раз, когда вы запускаете сайт, а не только в первый раз (что особенно относится к режиму разработки) и код, который выполняется только перед процессом инициализации (также называемый необходимыми файлами) в блок config.before_initialize do
.
Причина, по которой config.to_prepare
важна, заключается в том, что в режиме разработки код перезагружается при каждом запросе, а инициализаторы обычно - нет.Это означает, что Page
, на котором вы запускаете module_eval, будет запускать module_eval только один раз, но будет перезагружаться при каждом запросе.config.to_prepare
- это хук Rails, который запускается каждый раз, обеспечивая большое удобство для подобных ситуаций.
config / application.rb подход
class Application < Rails::Application
# ... other stuff ...
config.before_initialize do
require 'page_extensions'
end
config.to_prepare do
Page.send :include, Pants::Extensions::Page
end
end
Подход двигателя
ЕслиВы не хотите изменять config/application.rb
, тогда в Refinery CMS вы можете создать vendor/engines/add_page_extensions/lib/add_page_extensions.rb
, который будет выглядеть следующим образом:
require 'refinery'
module Refinery
module AddPageExtensions
class Engine < Rails::Engine
config.before_initialize do
require 'page_extensions'
end
config.to_prepare do
Page.send :include, Pants::Extensions::Page
end
end
end
end
Если вы используете подход с движками, вам также потребуется создать vendor/engines/add_page_extensions/add_page_extensions.gemspec
, который должен содержать простой gemspec:
Gem::Specification.new do |s|
s.name = 'add_page_extensions'
s.require_paths = %w(lib)
s.version = 1.0
s.files = Dir["lib/**/*"]
end
А затем в вашем Gemfile
добавить эту строку:
gem 'add_page_extensions', :path => 'vendor/engines'
Если вы используете подход с движком, вы, вероятно, захотитепоместите всю свою логику в директорию lib
движка, включая код Pants::Extensions::Page
.
Надеюсь, это поможет