Glyphicon在本地工作但不在Heroku上工作

时间:2013-12-14 22:05:55

标签: css ruby-on-rails twitter-bootstrap heroku glyph

如果你在这里查看我的应用程序:http://quiet-brushlands-5712.herokuapp.com/,靠近按钮的是一个图标,一个glyphicon。但它没有出现在heroku上。在本地它显示如下:

enter image description here

我在这里Using boostrap.css file in Rails production/heroku w/o LESS or SASS以及Google的其他链接尝试了“解决方案”。我也需要字形在Heroku上显示。有帮助吗?

我没有手动下载Twitter Bootstrap,我只是使用了一个gem。 在我的Javascript控制台中,我有这个:

GET http://quiet-brushlands-5712.herokuapp.com/assets/glyphicons-halflings.png 404 (Not Found)

我的Gemfile如果有帮助:

source 'https://rubygems.org'

gem 'rails', '4.0.2'
gem 'sass-rails', '~> 4.0.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'jquery-rails', '3.0.4'
gem 'turbolinks', '2.0.0'
gem 'jbuilder', '~> 1.2'
gem 'bootstrap-sass', '2.1'
gem 'jquery-ui-rails', '4.1.0'
gem 'pg'
gem 'font-awesome-rails', '4.0.3.0'

group :doc do
  # bundle exec rake doc:rails generates the API under doc/api.
  gem 'sdoc', require: false
end

group :development, :test do
  gem 'rspec-rails', '2.11.0'
  gem 'guard-rspec', '1.2.1'
  gem 'guard-spork', '1.2.0'
  gem 'childprocess', '0.3.6'
  gem 'spork', '0.9.2'
end

group :production do
  gem 'rails_12factor'
end

6 个答案:

答案 0 :(得分:35)

解决方案是将config.assets.compile = false文件中的config.assets.compile = true更改为config/environments/production.rb

答案 1 :(得分:13)

不使用编译回退的解决方案(在Rails 4.1上测试): 在scss文件中,在bootstrap之前导入bootstrap-sprockets。

@import "bootstrap-sprockets";
@import "bootstrap";

答案 2 :(得分:2)

继Vidya的评论之后,这可能是你的资产管道问题

虽然我不熟悉Bootstrap的细节,但是Heroku的资产管道存在一个主要问题,即必须先进行预编译才能有效地使用它


资产指纹识别

由于asset fingerprinting

,Heroku要求您预先编译资产

这是您的资产将在其文件名末尾应用哈希的位置,例如image-12sdafdsafkj223423jnjfadsnfsad.png或类似名称。这样做的原因显然是为了保持资产的独特性或其他东西

如果您follow the link provided by Vidya,您会发现Heroku会提示您使用Rails CMD预编译您的资产。它没有告诉你的是,除非动态分配

,否则这会弄乱你的图像

<强> SCSS

如上所述,我不确定具体如何适用于Bootstrap,但是使用Heroku的资产管道,你需要确保使用动态路径分配图像

与Rails本身一样,SCSS允许您使用asset_pathimage_path来创建动态链接。这是您必须要解决的问题。这是我们使用的一些代码,适用于Heroku:

.navigation_bar {
        z-index: 200;
        position: relative;
        background: asset_url('nav_bar/bg.png') repeat-x top;
}

答案 3 :(得分:1)

如果您不想在生产环境中将config.assets.compile设置为true(为了获得更好的性能,您可能不应该这样做),您可以在使用{{1}推送到heroku之前手动预编译资产}

答案 4 :(得分:0)

config/environments/production.rb

更改 config.assets.compile = falseconfig.assets.compile = true

(然后不要忘记提交并推送到heroku)

为我工作......

答案 5 :(得分:0)

因为我在搜索时得到了这个答案,我想我应该在这里说我遇到的解决方案是在bootstrap之前包含对“bootstrap-sprockets”的导入。这在https://github.com/twbs/bootstrap-sass/issues/653记录。

我意识到问题不是使用bootstrap-sass 3.2+,但我认为这可能有助于某人。