首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >控制作为引擎提取的应用程序的Rails初始化

控制作为引擎提取的应用程序的Rails初始化
EN

Stack Overflow用户
提问于 2011-06-14 01:16:08
回答 2查看 846关注 0票数 4

我希望将Rails应用程序作为引擎和独立应用程序使用。

具体来说,我有一个新的应用程序,我想插入到一个客户的网站,但理想的情况下,我想要像一个独立的系统一样容易地使用这个应用程序。但是,如果我的应用程序的引擎版本中存在config/environments/*..rb,我在应用程序启动时会遇到一个未初始化的常量错误;Rails抱怨说,在development.rb中找不到MyEngineModule::应用程序常量,我认为这只是一个加载顺序问题,因为当我单独运行应用程序时,不会出现这种情况。如果我删除development.rb,引用MyEngineModule::应用程序抱怨的原始初始化器,所以我尝试删除这些,一切都很好。

很好,除了原来的应用程序不能工作,因为它的配置已经消失了。

我是否可以对引擎< Rails::Engine类定义中的初始化加载顺序(或加载路径)进行一些调整,以防止在引擎上下文中加载原始信任和初始化器,并允许我将它们保留在应用程序上下文中?

更简单的答案可能是这个,但我觉得自己很固执,想知道要实现我最初的目标需要做些什么:

  • 将MyEngine的代码解压缩到引擎中,删除config/MyEngine/*文件和config/ initializers /*文件,并使客户端应用程序依赖于此。
  • 使“新”极简主义应用程序依赖于MyEngine,并将环境文件和初始化器移动到NewApp.

假设我感觉到了一些不自然的强制,让我的原始应用程序保持原样运行,如果我想阻止“引擎”加载“应用程序”配置,那么处理这个问题的最好方法是什么?我认为这只是在开发过程中的一个问题,因为我可以防止环境/*..rb文件被拖入宝石本身,但我喜欢在开发引擎及其客户端应用程序时能够在本地进行测试。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-14 18:02:02

继续我回答自己深奥问题的传统,似乎有一种可行的选择,就是在引擎的环境/*..rb和类似于这样的初始化器中添加一个卫士子句:

代码语言:javascript
复制
if defined? CuteEngine::Application
  CuteEngine::Application.configure do
    config.whatever = something
  end
end

这解决了两个Rails::应用程序对象成本相对较低的问题。不太高兴,但我会活下去的。

票数 6
EN

Stack Overflow用户

发布于 2013-01-23 14:45:35

把这个给新来的人。

Rails 3.1附带了可安装的引擎,听起来就像您所描述的那样。对于转换现有代码来说,这些文档不是很好,但是看起来这样做可以满足您的需要:

代码语言:javascript
复制
module CuteEngine
  class Engine < ::Rails::Engine
    isolate_namespace CuteEngine
  end
end

在另一个应用程序的routes.rb文件中,您将添加:

代码语言:javascript
复制
mount CuteEngine::Engine, at: "/cuteness"

http://edgeguides.rubyonrails.org/engines.html#mounting-the-engine

http://railscasts.com/episodes/277-mountable-engines

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6338110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档