在生产模式下,Rails 3.1是否有有效的Gemfile与Scss、Haml、Compass和HTML-Boilerplate一起使用?

4

我有一个成功的Rails 3.0.x项目,Gemfile中包含以下子集Gems:

gem "compass"
gem "haml"
gem "haml-rails"
gem "html5-boilerplate"

我今天尝试升级到Rails 3.1并保留所有功能,但是遇到了许多问题。我还没有找到适用于生产模式的配置,所以现在我正在使用开发模式。
我遵循了这里的建议:
  • "升级到Rails 3.1"来自Railscast:像往常一样非常好,告诉我如何更改production.rbdevelopment.rbapplication.rb以更新资产管道的配置。但没有涉及compass、sass和html5-boilerplate。
  • "使用Rails 3.1设置html-boilerplate"对我来说最合适,但不起作用,因为在生产模式下方法ie_html不可用。Gemfile中的更改已经记录下来了。
  • "无法在Heroku Cedar上让Rails 3.1、Compass、Sass、Blueprint工作"这对我根本不起作用,我在编译资产时遇到问题。尝试将所有内容设为全局,因为Compass和Html-Boilerplate之间存在依赖关系,而Html-Boilerplate必须是全局的,因为它使用了方法ie_html
  • 只使用group :assets块中的某些宝石的每次尝试都不成功。大多数情况下,例如compass和sass之间或compass和html5-boilerplate之间的依赖关系无法满足。
我的问题是:是否有一个可以同时使用Haml、Sass、Compass、Html5-Boilerplate和Rails 3.1的工作Gemfile?
新的Gemfile在开发模式下工作,但在生产模式下不工作:
gem "haml-rails"
group :assets do
  gem 'sass-rails', "  ~> 3.1.0"
  gem 'coffee-rails', "~> 3.1.0"
  gem 'uglifier'
  gem 'compass', '~> 0.12.alpha.0'
  gem "html5-boilerplate"
end
gem 'jquery-rails'

我尝试创建一个全新的Rails 3.1应用程序,并在其中添加了一个图像资源。一切都正常工作,因此开发模式和生产模式没有区别。在我的迁移应用程序中,我现在有以下状态:
  • 在开发模式下运行良好。
  • 禁用了一些html5-boilerplate的东西以解决生产环境中的问题。
  • 生产模式下尚未找到预编译的图像。
3个回答

2

我已经在Heroku Cedar上使其正常工作。

gem "rails", "~> 3.1.0"
gem 'sass-rails', "~> 3.1.0"

group :assets do
  gem 'coffee-rails', "~> 3.1.0"
  gem 'uglifier'
  gem 'compass', '~> 0.12.alpha.0'
  gem 'html5-boilerplate'
end

在执行git push heroku之前,首先需要在本地进行预编译:

RAILS_ENV=production bundle exec rake assets:precompile

然后将所有的 "public/assets" 添加到您的 git 仓库中并提交。然后:
git push heroku master

Heroku会检测public/assets/manifest.yml文件并使用其中的文件。这对我有效,应该也适用于您!干杯!

首先,非常感谢您的回复!我认为您的问题与我的不同,我没有使用Heroku。我的问题是HTML模式的某些部分使用了html5-boilerplate提供的帮助方法,而这段代码在生产模式下不可用。因此,问题不在于资产,而在于html5-boilerplate模板中使用的ruby代码。 - mliebelt
请查看我的另一个答案。我希望现在对其他人也有效。 - mliebelt

0

首先,我要为添加另一个答案道歉,但我认为历史对其他人有帮助。

我再次尝试创建一个新的应用程序,使用rails 3.1.1、html5-boilerplate、compass、sass和haml(感谢@theanym的评论),并找到了适用于开发和生产模式的解决方案。

这些是我采取的步骤:

  1. 我开始一个新的应用程序,并按照"使用Rails 3.1设置html5-boilerplate"的步骤进行。
  2. 当我以开发模式启动应用程序时,它运行得很好。
  3. 然后我以生产模式启动时,我遇到了以下错误:

    c:\apps\ruby\rails3\not>rails s -e production
    C:/apps/ruby/ruby192/lib/ruby/gems/1.9.1/gems/html5-boilerplate-1.0.0/lib/html5-boilerplate.rb:1:in `<top (required)>': 
      uninitialized constant Object::Compass (NameError)
        from C:/apps/ruby/ruby192/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require'
    
  4. 然后我更改了Gemfile(仅更改相关部分):

    group :assets do
      gem 'sass-rails',   '~> 3.1.4'
      gem 'coffee-rails', '~> 3.1.1'
      gem "compass", '~> 0.12.alpha.0', :group => :production
      gem 'html5-boilerplate', :group => :production
      gem 'uglifier', '>= 1.0.3'
    end
    
我所关注的解决方案是为了对compasshtml5-boilerplate标记额外参数:group => :production
然后,我不得不预编译资产,并且必须将style.scss更改为style.css.scss,但这只是一个小调整。在开发和生产模式下测试应用程序,似乎没有错误。

0

为了包含一些可能有助于他人的信息,这里是我目前的情况(或多或少地工作):

  • 我已经按照问题中所定义的方式定义了Gemfile
  • 因此,我必须确保在生产模式下不使用html5-boilerplate。我已经注释掉了我不需要的html代码部分。我主要使用html5-boilerplate模板,并且应用程序仅在我的本地PC上运行,因此使用来自Google的jquery等工具对我来说并不那么重要。
  • 解决:在生产模式下出现的图像问题(请参见我目前无法解决的一个问题How do I use reference images in Sass when using Rails 3.1?,以及Rails 3.1.0 - asset:precompile fails when using asset_url() SASS function,这在Rails 3.1.0中尚未解决)是由于将Rails 3.0.x应用程序迁移到Rails 3.1.0时的配置问题。我通过复制新创建的应用程序的工作配置(主要是包含错误条目的production.rb)来解决它。

我不会在这里再投入更多时间,而是等待Rails 3.1.1和html5-boilerplate的更新。


你是否曾经找到了一个可行的解决方案?我能够在Rails 3.0.x应用程序中完美地使用haml-rails、compass、html5-boilerplate和compass-960-plugin宝石,但是在3.1.x中还没有找到一个好的替代品。如果有任何建议/指针,将不胜感激。 - theandym

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