您需要将模块评估代码放入
config.to_prepare do
config/application.rb
或者创造一个引擎。代码是相同的,除了它每次运行站点时都执行,而不仅仅是第一次(尤其适用于开发模式)和仅在初始化过程(也称为需要文件)之前执行的代码
config.before_initialize do
封锁。
原因是
config.to_prepare
很重要的一点是,在开发模式下,每个请求都会重新加载代码,但初始化器通常不会
Page
,它将只运行模块评估一次,但将重新加载每个请求。
准备配置
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
如果不想修改
配置/应用程序.rb
然后你可以,在炼油厂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
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
代码。
希望这有帮助