【问题标题】:Rails3.1 engine: can't get SLIM or HAML to work in test/dummy appRails3.1 引擎:无法让 SLIM 或 HAML 在测试/虚拟应用程序中工作
【发布时间】:2012-09-20 08:28:41
【问题描述】:

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

缺少模板虚拟/索引,应用程序/索引与 {: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-rails gem 和 haml-rails gem,但是将文件重命名为 index.html.haml 导致同样的错误。

我做错了什么?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      您可以使用标准的haml gem,但在您的engine.rb 中您需要:

      require 'haml'

      【讨论】:

      • 我认为它是自动需要的,至少在引擎的情况下不是
      【解决方案3】:

      对于Haml,你必须把

      gem 'haml-rails'
      

      进入你的 Gemfile

      【讨论】:

      • 谢谢,这行得通。尽管如此,我还是有点困惑:在 Yehuda Katz 的帖子Clarifying the Roles of the .gemspec and Gemfile 中,他提到在开发 gem 时,Gemfile “gem 的 Gemfile 应该包含 Rubygems 源和单个 gemspec 行”。为什么这里不一样?
      • 对不起,我不明白你的问题。你想开发宝石吗?还是只使用haml gem?对于仅使用 HAML,您只需要 haml-rails gem 而不需要 haml 和 haml-rails
      • 我正在使用 Rails 3.1 的 rails plugin new my_engine 命令开发 gem。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      相关资源
      最近更新 更多