无法在Heroku Cedar上使用Rails 3.1、Compass、Sass、Blueprint。

5

大部分情况下,我遵循了这里提供的指导链接

这导致了以下错误消息来自于要求我创建的初始化程序:

from /app/config/initializers/sass.rb:1:in `<top (required)>'
2011-09-05T16:45:42+00:00 app[web.1]: /app/vendor/bundle/ruby/1.9.1/gems/railties-    3.1.0/lib/rails/railtie/configuration.rb:78:in `method_missing': undefined method `sass' for #  <Rails::Application::Configuration:0x00000003845528> (NoMethodError)

Heroku的入门页面并没有太大帮助。实际上,它只是相同的说明,只是没有初始化器。然而,没有它,就找不到任何蓝图内容,所以我仍然无法开始。
有人比我做得更进一步吗?
为了提供更多历史记录,我经历了许多错误,所以我觉得我应该把它们全部写出来。我遇到的第一个问题是html5-boilerplate位于:assets中,这意味着ie_html方法找不到,所以我将其从:assets中删除。
这导致了以下错误,因为html5-boilerplate依赖于compass:
2011-09-05T17:15:47+00:00 app[web.1]:    /app/vendor/bundle/ruby/1.9.1/bundler/gems/compass-b7f44a48d375/lib/compass/version.rb:56:in   `const_missing': uninitialized constant Compass::Frameworks (NameError)
2011-09-05T17:15:47+00:00 app[web.1]:   from /app/vendor/bundle/ruby/1.9.1/bundler/gems/compass-html5-boilerplate-405f9ddbca56/lib/html5-boilerplate.rb:1:in `<top (required)>'
3个回答

9
最终的解决方案是将sass-rails也设为全局(或者至少看起来是这样)。我觉得这次成功有点巧合,但它确实成功了。
我将compass从:assets中移除,并将其设为全局。这导致编译SCSS文件时出现错误,最终导致我升级到Ceder,然后出现了蓝图缺失的错误。
最后,我添加了初始化器,我认为这是为了将compass框架的内容添加到配置路径中。希望这些都有所帮助。
以下是相关代码:
gem 'heroku'
gem 'haml'
gem 'compass', :git => 'git://github.com/chriseppstein/compass.git'
gem 'html5-boilerplate', :git => 'git://github.com/sporkd/compass-html5-boilerplate.git'
gem 'sass-rails', "  ~> 3.1.0"

请注意compass和html5-boilerplate的github版本(如果您不使用它,则不需要h5bp)。
初始化程序是:
Rails.configuration.sass.tap do |config|
  config.load_paths << "#{Gem.loaded_specs['compass'].full_gem_path}/frameworks/compass/stylesheets"
end

目前我也遇到了同样的问题,将sass-rails从assets移动到全局似乎并不能解决我的问题...希望我们能够找到解决方法... - Pygmalion
我应该更详细一些,我必须将一些东西移动到全局,我已经更新了它。 - Chris Nicola

1

问题不在于需要将sass-rails设置为全局,而是您的全局设置中有些内容依赖于sass-rails。

对我来说,解决方案是将compass移动到资产组中。


是的,H5BP 在 HAML 基础视图中被调用,并最终需要成为全局变量。它依赖于 Compass,而 Compass 又依赖于 sass-rails。因此,这是一个连锁反应。 - Chris Nicola
你如何将指南针移动到资源组中?需要更改哪些代码? - Jaryl
在您的Gemfile中: group :assets do gem 'sass-rails' end - Eliza Brock Marcum
将指南针移动到资产组解决了我的问题。Heroku现在正常工作,开发机器上也没有任何区别。 - Slobodan Kovacevic

0

我在这里放了一些详细的指导:http://www.mattvanhorn.com/2012/01/07/heroku-cedar-assets-ruby-1-9/

它包括如何在Heroku Cedar堆栈上运行基本的Rails 3.1应用程序和Compass框架。

还有一个Github存储库链接(http://github.com/mattvanhorn/placepanda/commits),因此您可以按照提交的步骤逐步跟随。

如果您正在使用蓝图,您可能还需要在application.rb中添加load_paths。 我在另一个应用程序上使用twitter bootstrap,像这样:

if Rails.configuration.respond_to?(:sass)
  config.sass.load_paths << "#{Gem.loaded_specs['compass'].full_gem_path}/frameworks/compass/stylesheets"
  config.sass.load_paths << "#{Gem.loaded_specs['compass_twitter_bootstrap'].full_gem_path}/lib/../stylesheets"
end

在我的application.rb文件中,这个条件语句是为了防止Heroku在启动时出现错误,因为config.sass将不再可用于预编译。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接