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

时间:2013-04-29 05:24:29

标签: ruby-on-rails heroku ruby-on-rails-4 bootstrap-sass

我已经向Heroku部署了一个应用程序,但有一个问题似乎无法解决。通过Bootstrap-sass的应用CSS不会加载,因此我有一个未打造的应用程序。目前,这只是静态页面的集合。

我已经完成了README https://github.com/thomas-mcdonald/bootstrap-sass中除了一步之外的所有步骤。我无法弄清楚的步骤很可能是我的问题如下。由于Rails中的更改会阻止在供应商和库中编译图像,因此您需要将以下行添加到您的application.rb中:

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

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

第二个问题可能与我正在使用的宝石有关但是当我创建应用程序时,sass-rails gem安装了〜> 4.0.0.beta1。根据README,使用的版本是3.2。由于这也可能是一个问题,我已经包含了gem文件,任何人都认为这是我的问题的根本原因。

提前感谢您提供的任何帮助。

编辑:添加我在第一次尝试时采取的步骤,这些步骤导致样式在我的本地主机上正常工作,但在代码部署到heroku后却没有。

  1. 创建了一个新的rails 4 app(下面的gem文件)
  2. 添加了
  3. 下面的gem文件中列出的bootstrap-sass gem
  4. 将PG gem添加到生产组中的gem文件中,并将SQLite3移至开发和测试(运行bundle install - 在步骤2和3之后不进行生产)
  5. 为静态主页创建了一个页面控制器
  6. 在主页上的英雄单位中添加了一个h1,以查看样式是否正常工作
  7. 添加了styles.css.scss文件并包含了@import'bootstrap';到样式表
  8. 创建了git存储库,运行了我的初始提交并将代码推送到git
  9. 创建了heroku应用程序并将主人推送到heroku
  10. 在第二次尝试时,我在主页上添加了导航栏(如果这对任何人都有影响)并再次执行步骤7和8,但在执行这些步骤之前,我运行了以下代码行。

    RAILS_ENV=production bundle exec rake assets:precompile
    

    我仍然最终得到了一个在我的本地主机上具有正确风格的网站,但没有样式在Heroku上工作。正如我在上一篇文章中所述,有一行代码需要添加到我没有遵循的application.rb文件中,因为我不了解如何正确地将代码行添加到文件中。 / p>

    的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'
    

8 个答案:

答案 0 :(得分:70)

我刚才(2013年6月13日)得到了Heroku开发者的回答,他的支持引导我跨过障碍。 这就是我在我的Heroku应用程序中使用localhost获取css显示的方法。

“您需要做的就是打开生产中的资产服务并将记录器设置为stdout以使Rails4在Heroku上运行。我们目前正在努力平滑Rails 4应用程序的部署过程,但与此同时,您可以只改变代码中的那些行,你就不需要那些宝石了。“ (感谢布雷特和尼尔的好消息)

在/ config / environments / production中。设置:

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

我不知道记录器中的stdout,所以无法检查。

做一个git add。和git commit。

确保/config/database.yml具有:

production:
  adapter: postgresql
  encoding: unicode
  database: Your_appname_production

下面的env命令需要此信息。

确保您的Gemfile中有生产中的宝石'pg' 做另一个git提交。

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

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

它在bundle install和Heroku中出错。

不知道这是否有帮助,但我还将生产添加到了

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

不记得我在哪里看到了这个建议。

HTH AREL

答案 1 :(得分:18)

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

答案 2 :(得分:8)

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

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。

你的风格应该开始加载。

答案 3 :(得分:4)

首先从Rails beta升级到the latest release

检查您可能设置config.assets.initialize_on_precompile = false的位置,因为这可能会使其回退到非sprockets资源解析(我猜你在heroku docs上阅读Rails 3.x时可能会将其设置为false )。

将其重新设置为默认 true

ruby config.assets.initialize_on_precompile = true

然后为heroku上的应用启用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

改编自this bootstrap-sass issue comment

答案 4 :(得分:4)

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

config.assets.compile=true

Click here to know有关资产管道的更多信息。

答案 5 :(得分:2)

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

在config / envirnoments / production.rb中设置这些为apache服务器修复了类似的问题

答案 6 :(得分:2)

我不会设置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"

答案 7 :(得分:2)

这个英雄问题的一个简单原因可能是混合css文件类型。根据我自己的经验,如果你推出一个包含.css和.scss文件类型的资产文件夹,就会发生这种情况。也许其他人可以解释为什么会发生这种情况......但是,我只需要将.css文件重命名为.scss。然后,一切都正确编译,一切都在世界上。