问题标签 [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.

0 投票
1 回答
1174 浏览

ruby-on-rails - Rails 3:根据主题从不同位置提供静态资产

我正在为 rails 3 应用程序创建一个简单的主题系统。主题由放置在Rails.root/themes 中的文件夹组成,其中包含

  • .yml 清单文件
  • 一些液体模板文件
  • 静态资产子文件夹

现在对于某些控制器/动作,我想从当前主题渲染视图,因此相应地使用静态资产。

因此我需要一种方法来告诉 Rails 重写

  • http://example.com/theme1/* ----> #{Rails.root}/themes/theme1/assets/*
  • http://example.com/theme2/* ----> #{Rails.root}/themes/theme2/assets/*
  • ...

目前我无法弄清楚如何做到这一点,因为我想避免为每个主题使用不同的引擎或将资产文件复制到public.

我怎么解决这个问题?

编辑:其他要求

我一直在寻找不会破坏 rails 默认值的东西,这样以后我可以利用新的资产管道功能(计划用于 rails 3.1)。

目前我发现只有这个:

那将完全满足我的要求,不幸的是,启用资产管道时它将不适用。

0 投票
3 回答
3666 浏览

ruby-on-rails - rails 3.1 引擎和数据库

rails 3.1 引擎可以拥有自己的数据库,同时还可以访问主应用程序的数据库,例如用于用户身份验证如果可能,我该如何配置?

谢谢

0 投票
1 回答
934 浏览

ruby-on-rails-3 - 如何使用 RSpec 针对真实应用开发 Rails3 引擎?

已经写了很多关于引擎开发和使用虚拟应用程序进行测试的文章。

在我们的例子中,我们正在开发一个引擎,它不是一个独立的实体,而是依赖于一个真实的 Rails 3 应用程序。我们仍然希望这段代码存在于引擎中,而不是成为应用程序的一部分,因为引擎的工作是从具有自己的表和模型映射的遗留系统中导入数据,我们希望最终再次将其删除。

旧遗留表和新模式之间的数据映射很复杂,我们希望对引擎进行 TDD(使用 rspec)。

  • 我遵循了 Jose Valim 的书“Crafting Rails Appliations”,并且正在使用enginex gem
  • 我已替换/spec/dummy_app为指向真正 Rails 3 应用程序的 git 子模块。
  • 我无法从引擎加载模型(未定义的符号错误),因为真正的应用程序的 Gemfile 没有指向引擎,而且我也无法修改config/application.rb,以要求引擎(这是虚拟应用程序所做的) ,如本书第 15-16 页所述)。
  • 我将引擎的lib文件夹包含在加载路径$:spec_helper,并且路径可用。
  • 投入requirespec_helper.rb没有解决问题。
  • 我想知道是否有一个内部 Rails API(或一个聪明的猴子补丁)来挂钩真实应用程序的启动序列并需要引擎,而无需修改真实应用程序的代码(因为它在子模块中)。
  • 我不完全确定的另一个问题是我有 2 个 Gemfile(一个在引擎中,一个在应用程序中),当引擎处于活动状态时,它们都应该被使用。

想法?

0 投票
1 回答
599 浏览

ruby-on-rails - 无法从 Rails 引擎添加的 ActionController 方法内部访问模型

我正在开发要打包为 gem 的 Rails 引擎。在我的引擎的主模块文件中,我有:

其中 AuditorLog 也是引擎提供的模型。(我的意图是使用此引擎将“is_audited”添加到应用程序的控制器中,这将导致请求详细信息的审计日志记录。)

我遇到的问题是,当从使用引擎的应用程序调用此代码时,无法访问 AuditorLog 模型。看起来 Ruby 认为它应该是 ActionController 中的一个类:

NameError(未初始化的常量 ActionController::Auditor::InstanceMethods::AuditorLog)

而不是我引擎的模型。

谁能指出我正确的方向?这是我第一次创建引擎并尝试将其打包为 gem;我已经搜索了这方面的例子,但运气不佳。我将这个功能添加到 ActionController 类的方法是基于 mobile_fu 所做的,所以如果我做错了,请告诉我。

0 投票
6 回答
4707 浏览

ruby-on-rails - Ruby on Rails 3.1 博客引擎

我看到很多人询问博客引擎,但大多数问题和答案都相当陈旧。或者,如果它们不旧,则大多数项目都是旧的。我想知道是否有人知道当前支持 Rails 3.1 或至少正在积极开发以支持 Rails 3.1 的任何博客引擎。

我也有兴趣查看为 Rails 3.1 博客编写的任何示例应用程序或博客文章。我将在我的一个网站上添加一个博客,如果有任何好的网站,我更愿意简单地使用 Rails 引擎或示例代码。我讨厌重新发明轮子。寻找一些简单的东西,不要太固执己见,这样我就可以轻松地修改以满足自己的需要。

0 投票
1 回答
266 浏览

routes - 使用 Rails 3.1 引擎时如何引用我现有的路线?

我在 Rails 3.1 中使用forem引擎,但我的应用程序布局引用了一些资源路由,例如users_pathnew_sprite_path.

这一切在引擎之外都可以正常工作,但是当我尝试导航到引擎中的页面时,我得到了

如何让引擎正确查看我的应用程序中的路径?

0 投票
1 回答
2280 浏览

ruby-on-rails - 如何从 Rails 3.1 引擎调用父应用程序的辅助方法

我正在构建一个使用“充当”格式的 Rails 引擎来建立与父应用程序的用户模型的关系。

我希望开发人员能够使用该:auth_with选项指定辅助方法名称。这个想法是开发人员将在父应用程序中指定一个帮助方法,该方法将返回该会话的登录用户。

我的问题是,一旦开发人员指定了auth_with选项,我该如何调用该父应用程序的方法?

是否有更好的方法来获取父应用程序的登录用户?我希望它尽可能灵活,使其不依赖于简单地调用current_user.

0 投票
4 回答
4909 浏览

ruby-on-rails-3 - 如何使用 Gemfile 在 Rails 3 应用程序中自动加载 gemspec 依赖项

我有一个 Rails 3 应用程序,我正在将其变成 Rails 引擎/gem。这个引擎有一些我放在它的 .gemspec 文件中的 gem 依赖项。

我创建了一个新的“父”Rails 3 应用程序,我想将我的引擎 gem 添加到 Gemfile 并自动“加载”gem 的依赖项,但这对我不起作用!bundle install安装 gem 依赖项很好,但是当我启动服务器时,应用程序崩溃,因为它们没有加载。

例如,我的引擎的 gemspec 包含以下几行:

.. 并且父 Rails 3 应用程序在其 Gemfile 中有这些行:

但我收到以下错误:

但是,如果我添加gem 'acts_as_commentable', '>= 3.0.1'到父 Rails 3 应用程序的 Gemfile 中,则加载 gem 并且错误消失。

我正在使用 Rails 3.0.8。

有没有人有什么建议?我是否需要更改引擎的加载方式?

0 投票
0 回答
785 浏览

ruby-on-rails-3.1 - Rails 3.1 Engine 插件 rspec 测试(外部 gem Spree Commerce)

我在一个依赖于外部 gem 的应用程序中创建了一个引擎:Spree。我尽我所能按照本指南在该引擎中设置 RSpec 。

当我尝试使用一些集成测试来测试控制器时:tests_spec.rb:

我在虚拟应用程序的 environment.rb 文件中收到错误消息,表示无法运行以下命令:

因为我的控制器使用 Admin::ResourceController 作为在外部 Spree gem 中声明的扩展。好像 rspec 无法从主应用程序(包含引擎插件的那个)的 gemfile 中读取该类。

有人可以解释一下吗?

0 投票
4 回答
5993 浏览

ruby-on-rails - Guard 看不到文件更新

我正在使用此设置开发自定义引擎。

我已经创建了引擎

然后我添加了rspec-railsguard-rspec作为开发依赖项

在我的 gemspec 文件中。

当我同时运行rspecrake spec(有或没有bundle exec)我的规格运行良好。但是,当我运行guard命令时,它第一次运行所有规范,然后它什么也不做。它不会检测到整个应用程序中的任何文件更改。

Guardfile 像往常一样生成guard init spec,这里是它的内容

如果我在守卫运行的情况下保持一个外壳打开,而我从另一个外壳做touch app/my_model.rb任何事情都不会发生。Guardfile 中列出的所有其他文件(模式)都相同。

有没有办法调试这类问题?

更新 我创建了一个新项目(一个rails)并用这个安装了guard-shell gemGuardfile

即使在这种情况下,如果我编辑任何文件,也不会发生任何事情。我开始认为问题可能出在其他地方,也许在rb-fsevents宝石中。我可以检查什么?