使用Rails 4和bootstrap-sass gem无法在Heroku上运行CSS

我已经部署了一个应用程序Heroku有一个问题,我似乎无法弄清楚。 通过Bootstrap-sass的应用程序的CSS不加载,因此我有一个非风格的应用程序。 目前这只是一个静态页面的集合。

我已经在README https://github.com/thomas-mcdonald/bootstrap-sass中一步步走了一步,我无法弄清楚,很可能成为我的问题的步骤如下。 由于Rails中的变化导致无法在vendor和lib中编译图像,因此需要将以下行添加到application.rb中:

 config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif) 

由于我对编程还很陌生,第一个问题是我不知道如何在application.rb文件中添加它。 我将不胜感激,如果有人可以帮助告诉我如何以及在哪里正确添加上面的代码行。

第二个问题可能与我正在使用的gem有关,但是当我创build应用程序时,sass-rails gem被安装了〜> 4.0.0.beta1。 根据自述文件使用的版本是3.2。 由于这也可能是一个问题,我已经包括了gem文件incase任何人确定这是我的问题的根本原因。

预先感谢您提供的任何帮助。

编辑:要添加我在第一次尝试导致样式在我的本地主机上正常工作的步骤,但是没有将代码部署到heroku。

  1. 创build了一个新的rails 4应用程序(下面的gem文件)
  2. 添加了下面gem文件中列出的bootstrap-sass gem
  3. 将PG gem添加到生产组中的gem文件中,并将SQLite3移至开发和testing(运行捆绑安装 – 不执行步骤2和3)
  4. 为静态主页创build了一个页面控制器
  5. 在主页上的英雄单位添加一个h1,只是为了看看风格是否工作
  6. 添加一个styles.css.scss文件,并包含@import'bootstrap'; 到样式表
  7. 创buildgit仓库,运行我的初始提交,并将代码推到混帐
  8. 创buildheroku应用程序,并推动大师heroku

在第二次尝试时,我在主页上添加了一个导航栏(如果这对任何人都有所帮助),并再次执行步骤7和8,但是在执行这些步骤之前,我运行了以下代码行。

 RAILS_ENV=production bundle exec rake assets:precompile 

我仍然结束了一个网站,在我的本地主机上有适当的风格,但没有风格在Heroku上工作。 正如我上面在我原来的文章中提到的那样,有一行代码需要添加到application.rb文件中,由于我不了解如何正确地将代码行添加到文件中,所以我没有遵循。

的Gemfile:

 source 'https://rubygems.org' ruby "2.0.0" # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '4.0.0.beta1' group :production do gem 'pg' end group :development, :test do gem 'sqlite3' end # Gems used only for assets and not required # in production environments by default. group :assets do gem 'sass-rails', '~> 4.0.0.beta1' gem 'coffee-rails', '~> 4.0.0.beta1' gem 'bootstrap-sass', '~> 2.3.1.1' # See https://github.com/sstephenson/execjs#readme for more supported runtimes # gem 'therubyracer', platforms: :ruby gem 'uglifier', '>= 1.0.3' end gem 'jquery-rails' # Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks gem 'turbolinks' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 1.0.1' # To use ActiveModel has_secure_password # gem 'bcrypt-ruby', '~> 3.0.0' # Use unicorn as the app server # gem 'unicorn' # Deploy with Capistrano # gem 'capistrano', group: :development # To use debugger # gem 'debugger' 

我刚刚(2013年6月13日)得到了Heroku开发者的回答,他们的支持引导我穿越障碍。 这是我从我的Heroku应用程序的本地主机工作得到我的CSS显示。

“所有你需要做的就是开启生产中的资产服务,并将logging器设置为标准输出以使Rails4在Heroku上运行。目前,我们正在努力平滑Rails 4应用程序的部署过程,但同时你可以改变在你的代码中的这些行,你将不需要那些gem。“ (感谢布雷特和尼尔的好消息)

在/configuration/环境/生产。 组:

 config.cache_classes = true config.serve_static_files = true config.assets.compile = true config.assets.digest = true 

我不知道logging器中的标准输出,所以不能检查。

做一个混帐添加。 和git提交。

确保/config/database.yml具有:

 production: adapter: postgresql encoding: unicode database: Your_appname_production 

您将需要下面的env命令的这个信息。

确保在你的Gemfile中生成了gem'pg'做另一个git commit。

在一行中的应用程序的terminal中运行此命令:

 env RAILS_ENV=production DATABASE_URL=postgresql://user:pass@127.0.0.1/Your_app_name_production bundle exec rake assets:precompile 2>&1 

其中DATABASE_URL = postgresql与yml文件中的生产适配器相同,并且指定了Your_app_name_production,因为Heroku似乎只运行生产。

我被告知,并不需要:

 group :production do gem 'rails_log_stdout', github: 'heroku/rails_log_stdout' gem 'rails3_serve_static_assets', github: 'heroku/rails3_serve_static_assets' end 

它在捆绑安装和Heroku中出错。

不知道这是否有帮助,但我也增加了生产

 Bundler.require(*Rails.groups(assets: %w(development test production))) 

不记得我看到那个build议的地方了。

HTH Arel

只需运行bundle exec rake assets:precompile在推送到heroku之前进行bundle exec rake assets:precompile

我能够通过将这两个gem添加到我的应用程序来解决这个问题

 group :production do gem 'rails_log_stdout', github: 'heroku/rails_log_stdout' gem 'rails3_serve_static_assets', github: 'heroku/rails3_serve_static_assets' end 

补充一下,运行bundle install然后推送到heroku。

你的风格应该开始加载。

首先从Rails beta升级到最新版本 。

检查你可能在哪里设置config.assets.initialize_on_precompile = false因为这可能会使其回退到非链轮资产的解决scheme(我猜你可能已经设置为false在Heroku文档阅读Rails 3.x时) 。

将其重新设置为默认值true

ruby config.assets.initialize_on_precompile = true

然后在heroku上为app启用user-env-compile

 # Enable precompile support for the app heroku labs:enable user-env-compile # Remove precompiled assets rm -rf public/assets/ git add -u git commit -m 'Remove precompiled assets' # Now push and everything should just work from now on git push heroku master 

根据这个bootstrap-sass问题评论改编。

在文件/config/environments/production.rb设置config.assets.compile=true

 config.assets.compile=true 

点击这里了解更多关于资产pipe道。

 config.cache_classes = true config.serve_static_assets = true config.assets.compile = true config.assets.digest = true 

设置这些在config / envirnoments / production.rb修正了与我的Apache服务器类似的问题

我不会设置config.assets.compile = true这有性能影响(但它确实有效)。

如此处所述: https : //stackoverflow.com/a/16882028/647427

 When using the asset pipeline, paths to assets must be re-written and sass-rails provides -url and -path helpers (hyphenated in Sass, underscored in Ruby) for the following asset classes: image, font, video, audio, JavaScript and stylesheet. image-url("rails.png") becomes url(/assets/rails.png) image-path("rails.png") becomes "/assets/rails.png" The more generic form can also be used but the asset path and class must both be specified: asset-url("rails.png", image) becomes url(/assets/rails.png) asset-path("rails.png", image) becomes "/assets/rails.png" 

这个英雄问题的一个简单的原因可能是混合的CSS文件types。 根据我的经验,如果您推出包含.css和.scss文件types的资产文件夹,就会发生这种情况。 也许别人可以解释为什么会发生这种情况……但是,所有这一切都是为了将​​.css文件重命名为.scss。 那么,一切正确编译,一切都是正确的世界。