我已经向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后却没有。
在第二次尝试时,我在主页上添加了导航栏(如果这对任何人都有影响)并再次执行步骤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'
答案 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
答案 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。然后,一切都正确编译,一切都在世界上。