这更多用于实验 - 我知道我可以使用--full执行此操作,但我希望应用程序中的命名空间功能可以避免冲突
这个想法是有一个主应用程序 - 处理身份验证,常见项目,管理屏幕等 然后创建引擎以添加更多功能,如
这些引擎我可以选择,因为我需要用于我正在构建的任何类型的应用程序。 这可能吗?
是否同时应用--mountable和--full选项?
试验 - 如果我使用完整选项添加rspec然后简单添加
,会有任何问题rails plugin new plugin_name --skip-test-unit --full --dummy-path=spec/dummy
和lib \ plugin_name \ engine.rb
module PluginName
class Engine < Rails::Engine
# this is added by rails when an engine is mountable
# to isolate the plugin and prevent name clashes
isolate_namespace PluginName
# one of the additions to make rspec work from command line for the plugin
config.generators do |g|
g.test_framework :rspec, :view_specs => false
end
end
end
我已经创建了--full和--mountable引擎,并且rspec最终为任何人阅读都有一些很棒的文章(见下文),但是想知道这样做对我正在尝试的解决方案的广泛影响创建
我还在玩这个并且会发表我的发现..
任何帮助/讨论都将受到大力赞赏。
请注意
我遇到的问题......
有用的参考资料
答案 0 :(得分:2)
我设法通过以下步骤实现了这一步:
在我的父应用程序中,我将引擎安装在routes.rb
中mount PluginName::Engine => '/plugin_name'
我刚删除它。
创建了一个应用程序控制器,正如Ryan Bigg所述。
class PluginName::ApplicationController < ApplicationController
...
end
因为我想在生成控制器,模型,测试时将内容命名为间隔所以当我希望运行gem时,你必须注释掉isolate_namespace PluginName
lib \ plugin_name \ engine.rb父应用程序。
这还不是一个理想的解决方案。脱离我的头顶,我可以使用类似的东西:
isolate_namespace PluginName if %w[development testing].include?(Rails.env)
但必须测试这是否合适。
感谢Ryan帮助我找到了许多感谢
此外,使用--mountable switch版本也可以做同样的事情,你需要做的只是引擎中的另一个步骤config / routes.rb replace
PluginName::Engine.routes.draw do
与
Rails.application.routes.draw do
答案 1 :(得分:1)
是的,您可以通过在应用程序中引用它们来引用父应用程序资产,就像正常情况一样:
<%= stylesheet_link_tag "application %>
虽然,不确定为什么你会这样做,因为......
我将以第二个问题的答案回答你的第一个问题。
要使用应用程序的布局,您需要修改引擎中的ApplicationController
(命名空间)并让它继承引擎中的ApplicationController
。
然后,将使用引擎提供的布局为引擎提供控制器。我是doing this in my engine, forem。
有一天,the Engines Guide将涵盖这一点,在撰写本文时,目前正在撰写。