问题标签 [rails-engines]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - 将 Rails 引擎连接到全局布局中
我目前正在编写一个模块化的 Rails 应用程序,其中每个功能都在 Rails 引擎中。我已经设置了我的第一个引擎,到目前为止一切正常。现在我想知道将引擎连接到当前呈现在我的全局导航中的最佳方法是什么app/views/layouts/application.html.haml
,如下所示:
我发现最接近的是HookListener
of spree,它使用 deface gem。不幸的是,deface 仅适用于 html/erb 输出,因为它使用 nokogiri 解析 DOM,这无论如何都不是最好的主意。
ruby-on-rails - 可挂载引擎安装在什么路径上
我需要从可安装引擎的布局内部知道它当前安装在什么路径上。这样做的方法是什么?
例如,我的 routes.rb 包含以下行:
从 BackendCore 内部,我需要访问“/backend”的值。
ruby-on-rails - 我如何使用 railties 安装迁移以外的文件(例如配置文件)
我正在使用 Rails 3.1,并且可以使用 railties 来安装迁移(通过执行 rake railties:install:migrations FROM=plugin_name)。但是,我还需要复制几个配置文件(.yml 等)。我该怎么做呢 ?
ruby-on-rails-3.1 - app does not load engine's assets via sprockets
I am trying to rewrite an app using rails 3.1 making use of engines. Somehow the test dummy app does not pick up my assets and I don't know what would be causing this. i.e. stylesheets from the engine are are not included, same for javascript, and probably every thing else.
Anyone mind to have a look at https://github.com/janlimpens/portfolio-engine?
ruby-on-rails-3 - 应用程序控制器中的引擎路由
我的主应用程序的应用程序控制器中有一个 before_filter 钩子,它执行以下操作:(它不只是在闪存中放置一个链接,还有一条消息,但它与问题无关,它只是访问路径方法)
这适用于该应用程序,但是当我进入我制作的引擎的控制器时,我得到了异常
我知道在引擎中,除非前缀为main_app
因此将应用程序控制器中的方法更改为
摆脱异常,但我真的不想这样做。是否有另一种解决方案可以让引擎识别 main_app 路线?
编辑:
如果应用程序布局调用路径助手,也会发生这种情况。因此,如果引擎被设计为集成到 main_app 的布局中,那么这个问题也会在那里出现。
ruby-on-rails - 为什么引擎有用?
我正在使用 Ruby on Rails 3.1,我想知道以下内容:
- 为什么引擎有用?
- 引擎可以提供什么服务?
- 使用引擎是一种常见的做法吗?
ruby-on-rails - 如何正确扩展 Rails Engine 的控制器?
我正在开发名为 Carrier ( https://github.com/stanislaw/carrier ) 的 Rails 插件(它是 3.1 引擎)。
在我的一个 Rails 应用程序中,我想用一些新方法来扩展 Carrier 的控制器 - fx。向 Carrier::MessagesController 添加新操作 #comment_form(我希望此操作仅存在于我的应用程序中 - 我不想将其添加到引擎中 - 因为它非常具体)。
我在这里看到的两种策略:
1)我将 {Carrier's plugin root}/app/controllers/carrier/messages_controller.rb 文件复制到我的应用程序的 app/controllers/carrier/ 文件夹,然后扩展它(所有插件的原始操作也复制到 rails app controllers 文件夹! )。
2)我想要的更准确的方法 - 只是创建 {My rails app}/app/controllers/carrier/messages_controller.rb 并只编写我希望扩展 Carrier 的#comment_form 方法。
期望两个控制器的内容(来自插件文件夹的原始内容+我的 Rails 应用程序中只有新的#comment_form 的自定义)会叠加,我尝试了第二种方法。但是Rails随后停止识别Carrier插件文件夹中messages_controller.rb中写入的所有原始Carrier操作(#index,#show等),并开始将rails应用程序的messages_controller.rb版本视为唯一一个(所有原始操作都开始处理为空,因此开始通过 rails 约定的默认流程呈现)。
所以我的一般问题是:如何在不将它们完全复制到 Rails app/controllers 文件夹的情况下向 Rails Engines 控制器添加新操作?
UPD
现在我看到两个解决方案,它们允许扩展引擎的控制器而没有严重的黑客攻击(就像这个 gem 所做的那样:https ://github.com/asee/mixable_engines来自这个线程:Extending controllers of a Rails 3 Engine in the main app)
1) 在 #{main_app}/app/controller/your_engine 文件夹中的 your_controller.rb 中加载 YourEngine::Engine.config.root + 'app' + 'controllers' + 'your_controller'。注意load而不是 require。
2)设计方式(根据一些SO主题建议):在主应用程序中创建新控制器,将引擎的一个子类+编辑路由指向这个新控制器。
我仍然确信存在一些更好的解决方案。如果他们这样做,请纠正我!
ruby-on-rails-3 - rails 3.1.1 引擎 - 使用可安装引擎,是否可以访问父应用程序资产,默认布局?
这更多是为了实验 - 我知道我可以使用 --full 来做到这一点,但我希望应用程序中的命名空间功能以避免冲突
这个想法是有一个主应用程序 - 它处理身份验证、常见项目、管理屏幕等然后创建引擎以添加更多功能,例如
- 客户关系管理
- 厘米
- 博客
- 维基
- 论坛
- ETC
我可以根据需要为我正在构建的任何类型的应用程序选择这些引擎。这可能吗?
是否只是同时应用 --mountable 和 --full 选项的情况?
实验 - 如果我使用完整选项 add rspec 然后简单添加会不会有任何问题
并在 lib\plugin_name\engine.rb
我已经创建了 --full 和 --mountable 引擎,并且让 rspec 最终为任何阅读了一些很棒的文章的人工作(见下文),但想知道这样做对我正在尝试创建的解决方案的更广泛影响
我仍在玩这个并将发布我的发现。
任何帮助/讨论将不胜感激。
请注意
- 为什么我想这样做 - 构建一次使用多次......
- 我绝不希望非技术/客户添加“插件/引擎”——这纯粹是为了娱乐第 1 点。
我遇到的问题...
- 在顶级应用程序上运行服务器。仅当从引擎访问内容时,(我可以通过错误消息看到)我有一个路由问题(root_path 未定义或缺少设计路由) - 正在呈现父应用程序布局,我可以在提取的错误源中看到它. 进步,但还没有雪茄!
有用的参考资料
ruby-on-rails-3 - Rails 3.1 引擎:如何在 /scripts 中调用脚本
我正在将 Rails 应用程序重构为引擎。该应用程序依赖于 /script 中的 python 脚本,我想将其包含在引擎中。
原始应用程序代码是:
这个脚本应该存储在新引擎的什么地方?我将如何重写上面的代码行以反映这个新位置?
谢谢
杰克
ruby-on-rails - 将 `cache_classes` 设置为 `false` 修复了我的错误。接下来做什么?
我正在向我的 rails 应用程序添加一个可安装的引擎,它提供了类似论坛的功能(即添加问题、答案、评论等)。在开发中一切正常。但是,在登台/制作中,我在尝试创建答案时遇到错误,特别是 CanCan 权限错误(尽管我认为这可能是一个红鲱鱼)。但感觉 ti 可能与命名空间或名称冲突有关?
无论如何,当我config.cache_classes = false
在我的环境配置文件中设置时,问题就消失了。但这不是一个可接受的解决方案,因为它确实减慢了速度。
我从这里去哪里?如何确定需要重新加载哪些类?处理这个问题的常规方法是什么?
我正在使用 Rails 3.1。