Spa*_*asm 6 rails-engines ruby-on-rails-3 ruby-on-rails-3.1
这更多是为了实验 - 我知道我可以用--full这样做但我想在应用程序中使用命名空间的功能以避免冲突
想法是有一个主应用程序 - 处理身份验证,常见项目,管理屏幕等然后创建引擎以添加更多功能,如
这些引擎我可以挑选我正在构建的任何类型的应用程序.这可能吗?
是否只应用--mountable和--full选项?
试验 - 如果我使用完整选项添加rspec然后简单添加会有任何问题
rails plugin new plugin_name --skip-test-unit --full --dummy-path=spec/dummy
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
我已经创建了--full和--mountable引擎,并且让rspec最终为任何人阅读都有一些很棒的文章(见下文),但是想知道这对我正在尝试创建的解决方案的影响更大
我仍在玩这个并将发布我的调查结果..
任何帮助/讨论将受到大力赞赏.
请注意
我遇到的问题......
有用的参考资料
我设法通过以下步骤使其工作:
在我的父应用程序中,我将引擎安装在 paths.rb 中
mount PluginName::Engine => '/plugin_name'
Run Code Online (Sandbox Code Playgroud)
我刚刚把它删除了。
创建一个应用程序控制器,如下 Ryan Bigg 所说。
class PluginName::ApplicationController < ApplicationController
...
end
Run Code Online (Sandbox Code Playgroud)isolate_namespace PluginName因为我希望在生成控制器、模型、测试时有名称空间,所以当我希望 gem 在父应用程序中运行时,您必须注释掉lib\plugin_name\engine.rb 。
这还不是一个理想的解决方案。从我的头脑中,我可以使用类似的东西:
isolate_namespace PluginName if %w[development testing].include?(Rails.env)
Run Code Online (Sandbox Code Playgroud)
但必须测试这是否实用。
感谢 Ryan 帮助我找到了方向,非常感谢
此外,使用 --mountable 开关版本也可以完成同样的操作,您所需要做的就是在引擎中进一步执行 config/routes.rb 替换
PluginName::Engine.routes.draw do
Run Code Online (Sandbox Code Playgroud)
和
Rails.application.routes.draw do
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3147 次 |
| 最近记录: |