我正在开发一个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
会导致相同的错误。
我做错了什么?
答案 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'