Rails 4图像未在heroku上加载
Posted
技术标签:
【中文标题】Rails 4图像未在heroku上加载【英文标题】:Rails 4 images not loading on heroku 【发布时间】:2013-08-21 20:32:09 【问题描述】:我花了一天的大部分时间试图让图像加载到我的 heroku 应用程序上。我尝试的一切都在本地工作,但在部署到 heroku 之后就不行了。
我的资产下的 images 文件夹中保存了 png 文件。我在我的 css 中使用语法引用这些图像,例如;
#signin
background: url(<%= asset_path 'sf.png' %>);
background-size: 100%;
在 heroku 中,当我检查背景时,assets/sf.png 链接在那里,但是当您单击它时,它显示一个损坏的图像,表明它没有正确加载。
我尝试在 production.rb
文件中的真假之间切换 config.serve_static_assets = false
,但均无效。
我也有
group :production do
gem 'pg'
gem 'rails_12factor'
end
预编译总是成功的。
Rails 4。还有什么可以尝试的想法吗?
【问题讨论】:
【参考方案1】:我需要结合几种解决方案来完成这项工作,这就是我所做的:
宝石文件
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
我不需要在本地预编译资产。
【讨论】:
我已经拥有了 gem,但除此之外,config.assets.compile = true
对我来说就足够了。在 EU Cedar 堆栈上运行 Ruby 2.0、Rails 4.0。
这是一个肮脏的修复,因为由于config.assets.compile = true
,您将进行运行时编译。它可以工作,但不是正确的生产设置。
没有这样的功能:user-env-compile
不要在生产环境中编译资产。这使生产变慢。而是创建config/initializers/assets.rb
,并将这些添加到其中,以便rails 生产识别供应商和lib 预编译资产。 Rails.application.config.assets.precompile << /\.(?:png|jpg|jpeg|gif)\z/
Rails.application.config.assets.precompile << /\.(?:svg|eot|woff|ttf)\z/
@gwho,这似乎对我不起作用。将config.assets.precompile += %w( .svg .eot .woff .ttf .png .jpg .gif)
放入“/config/application.rb”对我有帮助。这个解决方案会减慢生产速度吗?【参考方案2】:
您需要做两件事来解决它。
首先,在production.rb
文件中将这两行从 false 更改为 true。
config.assets.compile = true
config.assets.digest = true
其次,如果你的图片有这样的语法
background: url("imgo.jpg")
改成
background: image-url("image.jpg")
我希望它能完成你的工作。
【讨论】:
是的!!!没有其他东西对我有用,但这确实有效(将config.assets.compile
设置为true
)。
是的,这对我也有用!谢谢!配置:config.assets.compile = true
不知道为什么这不是***评论。其他答案都不适合我。你刚刚让我免于在这上面浪费时间。除了 assets.compile 之外,我不需要弄乱其他任何东西。
40 个帖子后,你终于回答了我的问题。谢谢!
当我设置 config.assets.compile = false 时,我可以在不加载任何 css、图像和 ... 文件的情况下看到我的应用程序(它们无法访问)。当我将其更改为 true 时,我看不到我的网站,但所有文件都可以通过它们自己的链接访问!!你有什么办法解决吗?【参考方案3】:
我遇到的另一个问题是,在将资产加载到 heroku 之前,我在本地预编译了我的资产。这需要您遵循一组不同的步骤,如下所示。如果您在本地预编译资产,则必须遵循这些步骤,否则您对资产文件夹所做的任何更新都不会反映在 prod 中。
https://devcenter.heroku.com/articles/rails-asset-pipeline
RAILS_ENV=production bundle exec rake assets:precompile
commit
和 push
到服务器。
【讨论】:
【参考方案4】:我遇到了类似的问题,我用 custom.css.scss 中的以下行解决了它。告诉我这是否适合你。
background: image-url('sf.png')
根据您使用的是 ERB 还是 Sass,以不同的方式引用资产,see in the Ruby on Rails Guide。
【讨论】:
这对我也有用。我最初有:background:url(file.png)
将其更改为 background:image-url('file.png')
就可以了。
这是真正的解决方案。
我最初有background-image: image-url('file.jpg')
,它有时会起作用,但它一直有效:D【参考方案5】:
我还没有评论的声誉,但重要的是要注意 Heroku 实验室功能已被删除,所以现在您将收到“没有这样的功能:user-env-compile”错误
更多:https://github.com/Crowdtilt/CrowdtiltOpen/issues/251
【讨论】:
【参考方案6】:Rails ('4.1.5') 我遇到了类似的图像问题,即图像未在 Heroku 上显示,但在本地显示。我没有使用回形针或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
将图像从应用/资产复制到公共/资产。那么:
// tests should pass
bundle exec rake assets:precompile --trace
RAILS_ENV=production bundle exec rake assets:precompile --trace
git commit
git push
它在 Heroku 上运行良好。
【讨论】:
正如其他人所说,config.assets.compile = true
不适合生产。【参考方案7】:
我在仅显示图像时遇到了类似的问题。刚接触 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:
gem 'rails_12factor', group: :production
如 heroku 资产管道文档中所述。 https://devcenter.heroku.com/articles/rails-4-asset-pipeline
【讨论】:
【参考方案8】:我也尝试了很多解决方案,但我找到了一个非常宝贵的解决方案和解释 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
【讨论】:
【参考方案9】:默认情况下,图片不会作为资产提供,只有 css 和 js。你应该看看
的答案Syed Ehtsham Abbas 在这个问题上 Heroku does NOT compile files under assets pipelines in Rails 4
【讨论】:
最初可以工作,但在再次重新编译和再次重新加载后它坏了 @brad 你能发布你的产品配置吗?以上是关于Rails 4图像未在heroku上加载的主要内容,如果未能解决你的问题,请参考以下文章
在'rake assets:precompile'之后,Rails 4 资产未加载到 Heroku
React 和 Django 网站未在 Heroku 上加载
Rails 应用程序未在弹性 beantalk aws 上加载资产