2013-08-19 31 views
59

我花了一天的更好的時間試圖讓我的heroku應用程序加載圖像。我嘗試的所有東西都可以在本地使用,但在部署到heroku之後不會。Rails 4圖像不能加載在heroku上

我有png文件保存在我的資產下的圖像文件夾。我在我的CSS中引用這些圖像的語法,例如;

#signin { 
    background: url(<%= asset_path 'sf.png' %>); 
    background-size: 100%; 
} 

在Heroku的,當我檢查的背景下資產/ sf.png鏈接是存在的,但是當你點擊它,它顯示了一個破碎的形象,這表明它沒有正確加載。

我試過在production.rb文件中切換config.serve_static_assets = false文件在真與假之間,並且都不起作用。

我也有

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

預編譯總是成功的。

Rails 4.任何想法還有什麼可以嘗試?

回答

25

另一個問題,我遇到了這個問題,那就是我在本地預先編譯我的資產,然後將它加載到heroku。這要求您遵循一組不同的步驟,可以在下面找到。如果您在本地預先編譯資產,則必須執行這些步驟,否則您對資產文件夾所做的任何更新都不會反映在產品中。

https://devcenter.heroku.com/articles/rails-asset-pipeline

RAILS_ENV=production bundle exec rake assets:precompile

commitpush到服務器。

+0

謝謝,這對我的vps工作也很好。 – rmagnum2002

87

我需要幾種解決方案相結合,使這項工作,這裏是我做過什麼:

的Gemfile

gem 'rails_12factor', group: :production 

在我的Heroku控制檯

heroku labs:enable user-env-compile -a yourapp 

production.rb

config.serve_static_assets = true 
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' 
config.assets.compile = true 

我並不需要在本地預編譯的資產。

+0

謝謝,作品很有魅力 – AlaskaKid

+0

謝謝!有用! – jizak

+21

我已經有了寶石,但除此之外,'config.assets.compile = true'已經足夠我了。在EU Cedar堆棧上運行Ruby 2.0,Rails 4.0。 – zykadelic

12

我有一個類似的問題,我用custom.css.scss中的以下行解決它。告訴我,如果這對你有用。

background: image-url('sf.png') 

引用的資產正在做根據,如果你正在使用ERB或無禮的話,see in the Ruby on Rails Guide不同的方式。

+1

這爲我解決了,謝謝! – user3408293

+0

這也適用於我。我原本有:'background:url(file.png)'將其更改爲'background:image-url('file.png')'做了訣竅。 –

+0

這是真正的解決方案。 – samuelkobe

47

您需要做兩件事來解決它。 首先,在production.rb文件中將這兩行從false更改爲true。

 config.assets.compile = true 
     config.assets.digest = true 

其次,如果你的語法像這樣爲你的形象

background: url("imgo.jpg") 

將其更改爲

 background: image-url("image.jpg") 

我希望它做你的工作。

+0

對我有用:) –

+2

是的! !沒有其他工作對我來說,但這(把'config.assets.compile'設置爲'true')。 –

+0

是的,這也適用於我!謝謝!配置:config.assets.compile = true – SaintClaire33

1

我有一個類似的問題,只顯示圖像。作爲新軌道,我不知道我可以使用:

<%= image_tag("fileName.png", alt: "File Name Fancy", size: "100x100")%>

取代傳統的HTML。

的IMAGE_TAG在軌API解釋,但我覺得它的使用就比較好解釋在這裏: http://apidock.com/rails/ActionView/Helpers/AssetTagHelper/image_tag

所有我加入到我的應用程序是這樣的寶石: gem 'rails_12factor', group: :production

如Heroku的資產描述 - 流水線文檔。 https://devcenter.heroku.com/articles/rails-4-asset-pipeline

3

Rails('4.1.5')我有一個類似的問題,在Heroku上沒有顯示,但顯示在本地。我不使用回形針或載波寶石,我在本地預編譯並且還使用RAILS_ENV =生產我推送github並將它部署到Heroku。

我具有解決問題:

config.serve_static_assets = true 
config.assets.compile = true 
config.assets.js_compressor = :uglifier 
config.assets.digest = true 

// delete precompiled assets 
bundle exec rake assets:clobber --trace 
RAIL_ENV=production bundle exec rake assets:clobber --trace 

複製的圖像公共/資產從應用程序/資產。那麼:

// tests should pass 
bundle exec rake assets:precompile --trace 
RAILS_ENV=production bundle exec rake assets:precompile --trace 

git commit 
git push 

它在Heroku上運行良好。

1

我也嘗試了很多解決方案,但我發現了一個非常寶貴的解決方案和解釋 1. Heroku在公用文件夾中查找資產,這意味着您必須預編譯資產,但是如果您像我一樣尋找某種方式當我的開發環境設置爲gem sqlite並且生產設置爲pg時,要預編譯我的資產,那麼您應該這樣做。

在您的生產中。RB

config.serve_static_assets = true 

,如果你沒有安裝寶石皮克你需要把它註釋掉,改變你的生產環境中使用的寶石SQLite和運行這個

RAILS_ENV=production bundle exec rake assets:precompile 

當所有資產已經被預編譯,切換回到你的默認設置和git添加,提交,並推送到heroku