Rails 4图像未加载到heroku上

bra*_*rad 64 ruby-on-rails heroku

我花了大部分时间试图在我的heroku应用程序上加载图像.我尝试的所有东西都在本地工作,但在部署到heroku之后却没有.

我有png文件保存在我的资产下的images文件夹中.我在我的CSS中使用语法引用这些图像,例如;

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

在heroku中,当我检查背景时,assets/sf.png链接就在那里,但是当你点击它时它会显示一个损坏的图像,表明它没有正确加载.

我试着切换config.serve_static_assets = falseproduction.rb真假既不作品之间的文件.

我也有

group :production do
  gem 'pg'
  gem 'rails_12factor'
end
Run Code Online (Sandbox Code Playgroud)

预编译总是成功的.

Rails 4.关于还有什么可以尝试的任何想法?

小智 92

我需要结合几种解决方案才能完成这项工作,这就是我所做的:

的Gemfile

gem 'rails_12factor', group: :production
Run Code Online (Sandbox Code Playgroud)

在我的Heroku控制台中

heroku labs:enable user-env-compile -a yourapp
Run Code Online (Sandbox Code Playgroud)

production.rb

config.serve_static_assets = true
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'
config.assets.compile = true
Run Code Online (Sandbox Code Playgroud)

我不需要在本地预编译资产.

  • 我已经有了宝石,但除此之外,`config.assets.compile = true`对我来说已经足够了.在EU Cedar堆栈上运行Ruby 2.0,Rails 4.0. (22认同)
  • 没有这样的功能:user-env-compile (6认同)
  • @gwho,这似乎对我不起作用.在'/config/application.rb'中放置`config.assets.precompile + =%w(.svg .eot .woff .ttf .png .jpg .gif)`对我有帮助.这个解决方案会减缓生产吗? (3认同)
  • 不要在生产时编译资产.这让生产变得缓慢.而是创建`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 /` (2认同)

Pra*_*thi 55

你需要做两件事来解决它.首先,在production.rb文件中将这两行从false更改为true .

      config.assets.compile = true
      config.assets.digest = true
Run Code Online (Sandbox Code Playgroud)

其次,如果你的图像有这样的语法

    background: url("imgo.jpg") 
Run Code Online (Sandbox Code Playgroud)

将其更改为

     background: image-url("image.jpg")
Run Code Online (Sandbox Code Playgroud)

我希望它能完成你的工作.

  • 是!!!没有其他工作对我来说,但这确实(将`config.assets.compile`设置为`true`). (4认同)

bra*_*rad 27

我遇到的另一个问题是,在将其加载到heroku之前,我在本地预编译了我的资源.这需要您遵循一组不同的步骤,这些步骤可以在下面找到.如果您在本地预编译资产,则必须执行这些步骤,否则您对资产文件夹所做的任何更新都不会反映在prod中.

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

RAILS_ENV=production bundle exec rake assets:precompile

commitpush服务器.


小智 12

我有一个类似的问题,我用custom.css.scss中的以下行解决了它.告诉我这是否适合你.

background: image-url('sf.png')
Run Code Online (Sandbox Code Playgroud)

引用资产的方式不同,具体取决于您使用的是ERB还是Sass,请参阅Ruby on Rails指南.