问题标签 [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 - 测试 Rails 引擎时重新启动虚拟应用程序?
我正在使用一个新的 Rails 引擎,我需要在测试时重新启动它。我尝试Dummy::Application.initialize!
它不起作用,因为应用程序已经初始化,所以 Rails 返回了相同的实例。
我需要这样做,我的发动机after_initialize
缸体再次运行>
ruby-on-rails-3 - Rails 3.1:引擎与可安装应用程序
有人可以帮我理解 Rails 引擎和 Mountable 应用程序之间的区别吗?在 Rails 3.1 中,您可以使用“rails new plugin _ __ ”命令创建任何一个。
您想在什么时候使用一个与另一个?我知道您可以将 Engine 打包为一个 gem。可安装应用程序不是这种情况吗?还有哪些不同之处?
ruby-on-rails - Rails 引擎配置
我正在开发一个与第三方处理 OAuth 机制的 Rails 引擎。我想将所有配置都放在 Struct 属性中,因此所有引擎配置数据都存储在一起:
一些配置应该在应用程序级初始化程序中定义:
但是由于在加载应用程序初始化程序时 config.thirdparty 仍然未定义,所以它失败了。
ruby-on-rails - Rails 3 和 RefineryCMS 如何从同一个 Git 存储库管理和发布多个 gem?
我正在试验一个 Rails 应用程序的设计,它将大部分功能委托给高度专业化的引擎。但是,可能会有 10 个左右的引擎,我绝对不想管理 10 个不同的 gem 和 Git 存储库。
Rails 和 RefineryCMS 似乎都将它们所有的子模块都存放在一个 git 存储库中,但随后以某种方式将它们作为独立的 gem 发布,并要求它们全部使用 - 在 Rails 的情况下 - 一个简单的require
'rails/all'
.
我当然浏览过源代码,但我可以使用更有经验的眼睛寻求帮助......谁能告诉我这个多宝石,一个回购架构是如何工作的?
ruby-on-rails-3 - 如何更改在rails3中的插件/引擎中呈现部分的搜索顺序?
我正在 Rails3 中编写一个模块化项目,我遇到了这个问题。
我有我的主要项目,我想通过不同的自定义来实现它的一部分,所以我使用引擎,所以我:
但如果从 action1.html.erb 我打电话
第一个 _header.html.erb 被调用,我想在 myplugin 中调用“之前”。我可以只为 myplugin 中的视图执行此操作吗?
这让我可以防止很多无用的“命名空间”。
ruby-on-rails - 如何从引擎覆盖 Rails 应用程序路由?
我有一个 Rails 应用程序,我正在尝试将 Rails 引擎集成到其中。
主机应用程序有一些捕获所有路线:
看起来引擎路由是在应用程序捕获所有路由后加载的。
到目前为止,所有到达/engine/envs
路线的东西都被应用程序捕获,捕获所有路线。但是我看到堵塞路线是在引擎之后加载的,我不相信那些被抓住了。有什么方法可以覆盖应用程序路由?
ruby-on-rails-3 - Rails3 引擎助手覆盖
所以我有一个 Rails 3.0 引擎(gem)。
它在 app/controllers/advanced_controller.rb 中提供了一个控制器,在 app/helpers/advanced_helper.rb 中提供了一个相应的助手。(当然还有一些观点)。
到目前为止一切顺利,控制器/帮助程序/视图只是在使用 gem 的应用程序中自动可用,太好了。
但我想让本地应用程序选择性地覆盖引擎中 AdvancedHelper 的辅助方法(理想情况下能够调用“超级”)。这是一件非常合理的事情,想要允许,对,一个完全合理的(我认为很常见的)设计?
问题是,我似乎找不到任何方法让它工作。如果应用程序定义了它自己的 app/helpers/advanced_helper.rb (AdvancedHelper),那么引擎中的那个永远不会被加载——所以如果你想替换那里的所有辅助方法(不调用 super),这将起作用,但如果你只是想超越一个。
所以这实际上是有道理的,所以我选择了一个不同的名字。让我们称我的本地人为 ./app/helpers/local_advanced_helper.rb (LocalAdvancedHelper)。这个助手确实被加载了,如果我把一个不在原始引擎的 AdvancedHelper 中的方法放在那里,它就可以用于视图。
但是,如果我在其中放置一个与引擎的 AdvancedHelper 中的方法同名的方法......我的本地方法永远不会被调用。就像 AdvancedHelper(来自引擎)在调用链中比 LocalAdvancedHelper(来自应用程序)更早。事实上,如果我打开调试器并查看 helpers.ancestors,这正是正在发生的事情,它们与我在祖先链中的顺序相反。因此,AdvancedHelper(来自引擎)理论上可以调用“super”来调用 LocalAdvancedHelper(来自应用程序)——但这当然没有多大意义,你永远不想这样做。
但我想做的……我做不到。
任何人都有任何想法,有没有办法提供这种设计,这对我来说似乎完全合理,应用程序可以选择性地覆盖引擎中的辅助方法?
任何人都对它为什么会这样工作有任何解释吗?我尝试查看实际的 Rails 源代码,但很快就迷路了,围绕这些东西的代码非常抽象地分散在一堆地方。
这是一个非常深奥的问题,我很悲观,任何人都会有任何想法,希望你能给我惊喜!
== 更新
好的,为了了解 Rails 代码的哪一部分在哪里被调用,我在每个助手上放置了一个“def self.included ; debugger ; end”,然后在调试器中我可以引发异常以查看堆栈跟踪。
那仍然没有真正帮助我深入了解它,Rails 代码到处乱跳,非常混乱。
但是很明显,与其他助手相比,不同的rails代码调用了具有“标准”名称的助手(即WidgetHelper),以包含在给定控制器的“主”视图助手模块中。我想知道我是否给助手一个不同的名称,然后使用(“helper OtherNamedAdvancedHelper”)手动将它包含在我的控制器中,如果这会改变加载顺序。
ruby-on-rails - Ruby on Rails 3 - 创建带有视图和控制器的插件或引擎?
我刚刚开始了我的 RoR 编程,我想为我的简单 Rails 应用程序创建带有视图和控制器的插件/引擎。我在官方 rails wiki 上找到了有关创建插件的教程,但不幸的是它适用于 rails 2 :(
那么,我们如何为 RoR 3 应用程序编写带有视图和控制器的插件。
ruby-on-rails-3 - Ruby On Rails 3 中 Railties 和引擎之间的区别
我阅读了一些关于这些论点的文件,但我并不清楚它们是什么,它们之间有什么区别,以及其中一个是否符合我的需要。
我需要编写一个可以插入其他应用程序的应用程序,并且我想将它作为 gem 包含在其他应用程序中。基本上我需要几个模型,一个控制器,没有视图,加上一些初始化,支持来自托管应用程序和生成器的配置参数。
我走对了吗?
我应该阅读什么来了解如何做到这一点?
更新:
可以在这里找到一篇非常好的文章,其中包含很多细节。
本质上:
Railtie 是 Rails 框架的核心,它提供了几个钩子来扩展 Rails 和/或修改初始化过程。
Rails::Engine 只不过是一个已经设置了一些初始化程序的 Railtie。而且由于 Rails::Application 和 Rails::Plugin 是引擎,所以这里描述的相同配置可以在所有三个中使用。
ruby-on-rails - Rails3 引擎:未加载宝石(回形针和继承的资源)
在我的 rails3 引擎 gemfile 中,我添加了:
我还将它添加到我的 gemspec 中:
然后,我为我的引擎和客户端应用程序运行 bundle install 并启动客户端应用程序的控制台,以便首先测试回形针,我得到:
好的,所以似乎找不到回形针 gem 中的 has_attached_file 方法。为什么?我不知道。
继续讨论inherited_resources,我将脚手架生成的控制器更改为如下所示:
并加载我(在日志中)受到欢迎的索引页面:
我的问题是为什么这些不起作用?我的直觉是,我完全不知道引擎、命名空间和加载 gem 的一些东西。