我花了大部分时间试图在我的heroku应用上加载图片。我尝试的所有东西都在本地工作,但在部署到heroku后却没有。
我的png文件保存在我的资产下的images文件夹中。我在我的css中使用语法引用这些图像,例如;
#signin {
background: url(<%= asset_path 'sf.png' %>);
background-size: 100%;
}
在heroku中,当我检查背景时,assets / sf.png链接就在那里,但当你点击它时会显示一个损坏的图像,表明它没有正确加载。
我尝试在config.serve_static_assets = false
文件中切换production.rb
在true和false之间,但都不起作用。
我也有
group :production do
gem 'pg'
gem 'rails_12factor'
end
预编译总是成功的。
Rails 4.关于还有什么可以尝试的任何想法?
答案 0 :(得分:91)
我需要结合多种解决方案才能完成这项工作,这就是我所做的:
<强>的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
我不需要在本地预编译资产。
答案 1 :(得分:54)
你需要做两件事来解决它。
首先,在production.rb
文件中将这两行从false更改为true。
config.assets.compile = true
config.assets.digest = true
其次,如果你的图像有这样的语法
background: url("imgo.jpg")
将其更改为
background: image-url("image.jpg")
我希望它能完成你的工作。
答案 2 :(得分:27)
我遇到的另一个问题是我在将资源加载到heroku之前在本地预编译了我的资产。这需要您遵循一组不同的步骤,这些步骤可以在下面找到。如果您在本地预编译资产,则必须执行这些步骤,否则您对资产文件夹所做的任何更新都不会反映在prod中。
https://devcenter.heroku.com/articles/rails-asset-pipeline
RAILS_ENV=production bundle exec rake assets:precompile
commit
和push
到服务器。
答案 3 :(得分:12)
我有一个类似的问题,我用custom.css.scss中的以下行解决了它。告诉我这是否适合你。
background: image-url('sf.png')
根据您使用ERB或Sass see in the Ruby on Rails Guide,以不同的方式引用资产。
答案 4 :(得分:3)
我没有评论的声誉(但是)重要的是要注意Heroku实验室功能已被删除,所以现在你会得到一个“没有这样的功能:user-env-compile”错误
答案 5 :(得分:2)
Rails('4.1.5')我有一个类似的问题,没有在Heroku上显示但在本地出现。我没有使用paperclip或carrierwave gems,我在本地预编译 并使用 RAILS_ENV = production 我推送到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
将图片复制到app / assets中的public / assets。然后:
// tests should pass
bundle exec rake assets:precompile --trace
RAILS_ENV=production bundle exec rake assets:precompile --trace
git commit
git push
它在Heroku上运行良好。
答案 6 :(得分:1)
我在显示图像方面遇到了类似的问题。作为rails的新手,我不知道我可以使用:
<%= image_tag("fileName.png", alt: "File Name Fancy", size: "100x100")%>
而不是传统的HTML。
在rails api中解释了image_tag,但我发现它的用法在这里有更好的解释: http://apidock.com/rails/ActionView/Helpers/AssetTagHelper/image_tag
我添加到我的应用程序中的所有内容都是这个宝石:
gem 'rails_12factor', group: :production
如heroku资产管道文档中所述。 https://devcenter.heroku.com/articles/rails-4-asset-pipeline
答案 7 :(得分:1)
我也尝试了很多解决方案,但我发现了一个非常宝贵的解决方案和解释 1. Heroku在公共文件夹中查找资产,这意味着您必须预编译您的资产,但如果您像我一样,当我的开发环境设置为gem sqlite并且生产设置为pg时,正在寻找预编译资产的方法的人然后你会这样做。
在你的production.rb
中config.serve_static_assets = true
如果您没有安装gem pg,您需要将其注释掉并更改您的生产环境以使用gem sqlite并运行此
RAILS_ENV=production bundle exec rake assets:precompile
当所有资产都已预编译后,切换回默认设置并git add。,commit,并推送到heroku
答案 8 :(得分:-1)
默认情况下,图片不会作为资源投放,只有css和js。你应该看看
的答案Syed Ehtsham Abbas在这个问题上 Heroku does NOT compile files under assets pipelines in Rails 4