2

我正在开发一个 Rails 3.1 引擎,为了对其进行集成测试,我想使用 SLIM 而不是普通的 ERB。所以我试图简单地添加s.add_development_dependency "slim"到我的.gemspec文件中,但是当我将index.html.erb文件重命名为 时index.html.slim,Rails 抱怨:

缺少模板 dummy/index、application/index with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder]}。在以下位置搜索:*“/Users/josh/Documents/Work/Sientia/iq_menu/full/spec/dummy/app/views”*“/Users/josh/Documents/Work/Sientia/iq_menu/full/app/views”

我也用slim-railsgem 和 gem尝试过haml-rails,但是重命名文件index.html.haml导致同样的错误。

我究竟做错了什么?

4

3 回答 3

4

显然,这是一个老问题,但我今天遇到了同样的事情(这次是在 Rails 4 上),我想我可以在这里澄清这个问题。

Bundler 有两个角色——一个是获取 gem 并使其代码可用,另一个是实际“要求”该代码到您的项目中。

当您将依赖项添加到 gemspec 中时,它会执行第一个功能,但不会执行第二个功能。

在应用程序的生产使用中,gemspec 标识的依赖项被有效地添加到应用程序的包中,因此应用程序的捆绑器将获取和需要您的 gem。

如果您只有 gemspec 中的引用,而不是 Gemfile 中的引用,那么实际上没有任何需要执行,因此 gem 不会被初始化并且模板引擎对您的应用程序不可用。将其添加到 Gemfile 使其被初始化和注册。

我认为你需要两者,比如slim/haml。仅拥有 Gemfile 引用意味着应用程序不会知道依赖关系,而仅拥有 gemspec 引用意味着引擎不会在您的虚拟应用程序中初始化。

于 2014-08-05T21:51:08.960 回答
3

您可以使用标准hamlgem,但engine.rb您需要:

require 'haml'

于 2013-06-25T14:49:38.180 回答
2

对于 Haml,你必须把

gem 'haml-rails'

进入你的 Gemfile

于 2012-09-20T08:50:13.363 回答