Rails3.1引擎:无法在测试/虚拟应用程序中使用SLIM或HAML

时间:2012-09-20 08:28:42

标签: ruby-on-rails ruby-on-rails-3.1 haml rails-engines slim-lang

我正在开发一个Rails 3.1引擎,并且为了集成测试它我想使用SLIM而不是普通的'ERB'。因此,我尝试将s.add_development_dependency "slim"添加到.gemspec文件中,但在将index.html.erb文件重命名为index.html.slim时,Rails会抱怨:

  

缺少模板虚拟/索引,应用程序/索引{{locale =&gt; [:en],:formats =&gt; [:html],:handlers =&gt; [:erb,:builder]}。搜索:*“/ Users / josh / Documents / Work / Sientia / iq_menu / full / spec / dummy / app / views”*“/ Users / josh / Documents / Work / Sientia / iq_menu / full / app / views”< / p>

我也尝试使用slim-rails gem以及haml-rails gem,但是将文件重命名为index.html.haml会导致相同的错误。

我做错了什么?

3 个答案:

答案 0 :(得分:4)

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

Bundler有两个角色 - 一个是获取宝石并使其代码可用,另一个是实际上需要&#34;那段代码进入你的项目。

在gemspec中添加依赖项时,它会执行第一个函数,但不执行第二个函数。

在应用程序的生产使用中,gemspec标识的依赖项有效地添加到应用程序的捆绑包中,因此应用程序的捆绑程序将同时获取并需要您的宝石。

如果你只有gemspec中的引用,而不是你的Gemfile中的引用,那么实际上没有任何东西正在执行require,因此gem不会被初始化并且模板引擎不可用于你的应用。将它添加到Gemfile会使其初始化并注册。

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

答案 1 :(得分:2)

对于Haml,你必须把

gem 'haml-rails'

进入你的Gemfile

答案 2 :(得分:2)

您可以使用标准的haml宝石,但在engine.rb中您需要拥有:

require 'haml'