我希望将Rails应用程序既可用作引擎又可用作独立应用程序.
具体来说,我有一个新生的应用程序,我想插入客户的网站,但理想情况下,我想轻松使用该应用程序作为一个独立的系统.但是,如果我的应用程序的引擎版本中存在config/environments/*.rb,那么当我对我的引擎具有依赖性的应用程序启动时,我会收到未初始化的常量错误; Rails抱怨在developer.rb中找不到MyEngineModule :: Application常量,我认为这只是一个加载顺序问题,因为当我独立运行app时不会发生这种情况.如果我删除了development.rb,引用我的MyEngineModule :: Application的原始初始化程序会抱怨,所以我试图删除它们,一切都很好.
很棒,除了原始的应用程序不起作用,因为它的配置已经消失.
我是否可以对初始化加载顺序(或引擎<Rails :: Engine类定义中的加载路径)进行一些调整,以防止在引擎上下文中加载原始配置和初始化程序,并允许我离开它们适用于应用程序上下文?
更简单的答案可能就是这个,但我感觉很顽固,并且想知道如何使我的原始目标成为可能:
假设我觉得有些不自然的强迫要保持我的原始应用程序可以运行,如果我想阻止"引擎"加载"应用程序"配置,那么处理它的最佳方法是什么?我认为这只是开发过程中的一个问题,因为我可以阻止环境/*.rb文件被拉入gem本身,但我喜欢能够在我开发引擎及其客户端应用程序时进行本地测试.
继续我回答我自己的深奥问题的传统,似乎一个可行的替代方案是在引擎的环境/*.rb中包含一个保护条款和类似这样的初始化器:
if defined? CuteEngine::Application
CuteEngine::Application.configure do
config.whatever = something
end
end
Run Code Online (Sandbox Code Playgroud)
这解决了以相对较低的成本获得两个Rails :: Application对象的问题.不是很开心,但我会活下去.
| 归档时间: |
|
| 查看次数: |
725 次 |
| 最近记录: |