关于css:heroku不显示SCSS背景图像

Heroku Not Showing SCSS Background Images

我有一个Rails应用程序,它使用来自style.css.scss文件的背景图像。我找到了多种方法让图像显示在localhost上,但没有办法让它们显示在Heroku上。

我看过很多这样和这样的帖子,以及其他类似的站点,但是到目前为止还没有什么效果。

这是我的style.css.scss中的代码:

1
2
3
4
5
6
7
8
.hero-000 {
    width: 102%;
    background: url(asset-path("hero-000.jpg")) no-repeat center center fixed;
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
    background-size: cover;
}

然而,我也尝试过background-imageimage-urlasset-url以及其他许多在相关的so帖子中发现的排列。

我在我的production.rb文件中有这个:

1
2
3
4
  config.serve_static_files = true
  config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'
  config.assets.compile = true
  config.assets.digest = true

在我的application.html.erb文件中调用css表:

1
  <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>

正如其他帖子所建议的,我已经将其添加到了我的应用程序中。rb:

1
config.assets.initialize_on_precompile = false

关于如何解决这一问题的任何想法都会很高兴地收到!

附加信息

这是我的GemFile:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
source 'https://rubygems.org'

gem 'rails', '4.2.5'

group :production do
  gem 'pg'
  gem 'rails_12factor'
end

group :development do
  gem 'sqlite3'
  gem 'binding_of_caller'
  gem 'better_errors'
end

gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'bcrypt', '~> 3.1.7'
gem 'bootstrap-sass'
gem 'friendly_id', '~> 5.1.0'
gem 'google-analytics-rails', '1.1.0'
gem 'paperclip'
gem 'meta-tags'
gem 'bootsy'
gem 'devise'

以下是本地主机中的控制台错误:enter image description here

在赫罗库:enter image description here


我认为Heroku的主要问题是它无法加载bootstrap.css。你必须先解决这个问题。

对于引导支持,添加这两个gem,

1
2
gem 'therubyracer'
gem 'less-rails-bootstrap'

在application.js中的jquery_js引用之后指定。

1
//= require twitter/bootstrap

application.css在需要树之前。

1
*= require twitter/bootstrap

然后从视图文件中的中删除bootstrap href引用。

我认为这将帮助你了解更多。http://rails-magic.blogspot.com/2016/05/how-to-integrate-custom-bootstrap-theme.html


看看你的路……它必须与您的配置有关。你已经在代码中找到了你的绝对路径,要么就是它在某个相关的地方。搜索你的代码库,确保你没有自己的机器的绝对路径硬编码任何地方。确保这一切都是相对的。/Users/elizabethbayardelle/Dropbox/Code/BIA/不应该在您的源代码中的任何地方,而是应该在您的herokupp实例中使用它。在您的本地主机屏幕截图上,您甚至有一条到heroku.com的路径…怎样?我敢肯定,第二次接管你的配置会解决这个问题。


试试这个:

1
rake assets:precompile RAILS_ENV=production

由于预编译只在生产模式下完成,因此无需显式指定环境。

更新:

尝试将以下行添加到GemFile:

1
2
3
4
5
6
group :assets do
  gem 'therubyracer'
  gem 'sass-rails',"  ~> 3.1.0"
  gem 'coffee-rails',"~> 3.1.0"
  gem 'uglifier'
end

然后是bundle install

希望能成功:)


[编辑]

在Rails 4资产管道文档(2.3.2)中发现了这一点。我知道我之前发布了一个变体,但也许可以尝试下面的每一个,看看有什么效果?

对于图像:

image-url("rails.png")变为url(/assets/rails.png)

image-path("rails.png")变为"/assets/rails.png"

也可以使用更通用的形式:

asset-url("rails.png")变为url(/assets/rails.png)

asset-path("rails.png")变为"/assets/rails.png"


好的,利兹,我解决了这个问题。如果在production模式下运行服务器,只需在config/environments/production.rb中添加该行;如果在development模式下运行服务器,只需添加config/environments/development.rb即可。

1
config.BASE_URL = 'https://herokuapp.com/'

然后

1
background: url(https://herokuapp.com/assets/hero-000.jpg) no-repeat center center fixed;

在默认情况下找不到该图像,因为herokuapp为您的应用程序创建一个子域。

试试这个:

将该映像复制到public/img文件夹,然后执行以下操作

1
background: url(https://pure-gorge-23608.herokuapp.com/img/hero-000.jpg) no-repeat center center fixed;


如果要在样式表中使用asset_path,则需要将它们转换为erb模板。示例:application.css.erb—这使得asset_path助手在模板中可用。

然而,在大多数情况下,使用的正确方法是image-url()。只需确保以正确的方式使用它:

1
2
background-image: image-url("hero-000.jpg");          # < Correct
background-image: url(image-url("hero-000.jpg"));     # < Incorrect


我也有同样的问题,我用的是

1
background: url("/assets/homebackground.jpg") no-repeat center center fixed;

在我的application.css上。它在本地主机上工作,但在Heroku上没有显示任何图像。我将以下内容从假改为真:

1
2
3
4
5
6
7
8
# config/environments/production.rb
   YOURAPPLICATION::Application.configure do

   # your config settings
   config.assets.compile = true

   # your other config settings
end

不幸的是,在所有这些美妙的答案中,我从来没有解决过这个问题。不过,我确实找到了一个稍微有点黑客的解决方案,使用来自html.erb文档的erb链接图像,而不是.css.scss文档。

我用HTML链接图像:

1
2
3
4
      <%= image_tag 'bg-hero-000.jpg', class:"hero-image",alt:"strong man and woman lifting weights" %>
     <!-- hero-image-inner -->
   <!-- hero-image-inner -->
 <!-- row -->

然后使用CSS为图像创建一种类似背景的感觉:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
.hero-image-outer {
   width: 300%;
   height: 600px;
   overflow-y: hidden !important;
   border-bottom: solid thick red;
 }

 .hero-image-inner {
   width: 66%;
   overflow-x: hidden !important;
 }

 .hero-image {
   height: 600px;
   margin-left: -50%;
   z-index: 0 !important;
 }

 @media screen and (min-width: 1100px) {
   .hero-image-outer {
     width: 100%;
   }

   .hero-image-inner {
     width: 100%;
     height: 600px;
   }

   .hero-image {
     width: 100%;
     height: auto;
     margin-left: 0%;
   }
 }

 .overlap-hero-image {
   margin-top: -500px;
   height: 500px;
 }

绝对不是完美的,它也不能解决2016年的英雄CSS图像之谜,但它对于这个网站来说已经足够好了。感谢我所有的回答者花时间和我一起探讨这个问题。


我看到与您的配置相关的多个问题。您发布的图片显示404错误,但是本地主机上的错误与Heroku应用程序上的不同。Heroku应用程序上的那些与CSS文件的绝对路径相关,一旦您解决了这些错误,您将能够看到Heroku上的图像。

Heroku应用程序正在引用引导文件的绝对路径。绝对路径指向本地主机上的文件。由于本地主机上存在该文件,因此在本地主机上查看应用程序时不会产生与在Heroku上查看应用程序时相同的问题。

仔细查看您发布的错误消息中的URL:https://pure-gorge-23608.herokuapp.com/users/yourname/dropbox/code/bia/app/assets/stylesheets/bootstrap.css(http://pure-gorge-23608.herokuapp.com/users/yourname/dropbox/code/bia/Failed to load resource: the server responded with a status of 404 (Not Found)

尝试在代码库中搜索绝对路径。如果您在Mac或类似的Unix环境中,ack /Users/yourname/Dropbox/Code/BIA

提示:如何在Linux上找到包含特定文本的所有文件?

找到包含对引导文件的绝对路径引用的文件时,请更改引用,使其成为相对路径而不是绝对路径。

如果您在Windows本地主机上,也可以使用文件中的find,但我在Windows中工作已经很久了。http://www.howtogeek.com/99406/how-to-search-for-text-inside-of-any-file-using-windows-search/

祝你好运,继续努力,你的网站看起来很有前途!