在生产模式下,Rails 3.1和Scss,Haml,Compass和HTML-Boilerplate都有一个有效的Gemfile吗?

时间:2011-09-06 20:10:47

标签: ruby-on-rails-3.1 sass compass-sass html5boilerplate

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

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

我今天尝试升级到Rails 3.1并保留所有功能,并且这样做有很多问题。我还没有找到在生产模式下对我有用的配置,所以我现在正在开发模式。

我在这里遵循以下建议:

    来自Railscast的
  • "Upgrading to Rails 3.1":像往常一样非常好,并告诉我如何更改production.rbdevelopment.rbapplication.rb以更新资产管道的配置。但是没有触及指南针,sass和html5-boilerplate。
  • "Setup html-boilerplate with Rails 3.1"包含最适合我的内容,但不起作用,因为方法ie_html在生产模式下不可用。 Gemfile中的更改记下来
  • "Unable to get Rails 3.1, Compass, Sass, Blueprint working on Heroku Cedar"这对我来说根本不起作用,我对编译的资产有问题。尝试是将全部内容全局化,因为Compass和Html-Boilerplate之间存在依赖关系,由于方法ie_html,Html-Boilerplate必须是全局的。
  • 每次尝试仅使用group :assets块中的某些Gems都不成功。大多数时候,例如,指南针和sass,或指南针和html5-boilerplate无法实现。

所以我的问题是:是否有一个工作的Gemfile允许使用Haml,Sass,Compass,Html5-Boilerplate,当然还有Rails 3.1?

新的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样板内容来解决生产中的问题。
  • 在生产模式下找不到预编译的图像。

3 个答案:

答案 0 :(得分: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

然后将所有公共/资产添加到您的git仓库并提交。然后:

git push heroku master

Heroku会检测public/assets/manifest.yml文件并只使用这些文件。

这适合我,所以应该工作!干杯

答案 1 :(得分:0)

只是包含其他人可能提供帮助的一些信息,这里我现在的情况(或多或少):

  • 我定义了问题中定义的Gemfile
  • 因此,我必须确保在生产模式中使用html5样板 。我已经注释掉了我不需要的部分HTML代码。我使用html5样板模板(大多数情况下),应用程序只在我的本地PC上,所以通过使用例如谷歌的jquery对我来说并不那么重要。
  • 解决:生产模式下图像的问题(请参阅How do I use reference images in Sass when using Rails 3.1?目前无法解决的一个问题,以及Rails 3.1.0中未解决的Rails 3.1.0 - asset:precompile fails when using asset_url() SASS function))配置问题由于Rails 3.0.x应用程序迁移到Rails 3.1.0。我通过复制新创建的应用程序的工作配置(主要是包含错误条目的production.rb)解决了这个问题。

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

答案 2 :(得分:0)

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

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

这些是我采取的步骤:

  1. 我开始使用新的应用程序,然后按照食谱"Setup html5-boilerplate with Rails 3.1"
  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
    
  5. 我的解决方案的相关部分是表示compasshtml5-boilerplate附加参数:group => :production

    然后我必须预先编译资产,并且必须将style.scss更改为style.css.scss,但这只是一个小小的调整。使用开发和生产模式测试应用程序,似乎没有错误。