ruby-on-rails - view教程 - ruby on rails教程




Rails 4图像未加载到heroku上 (6)

Rails('4.1.5')我有一个类似的问题,没有在Heroku上显示但在本地出现。 我没有使用paperclip或carrierwave gems,我在本地预编译,也使用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

从app / assets复制图像到公共/资产。 然后:

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

git commit
git push

它在Heroku上运行良好。

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

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

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

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

我尝试在production.rb文件中切换true和false之间的config.serve_static_assets = false ,但两者都不起作用。

我也有

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

预编译总是成功的。

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


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

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

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

    background: url("imgo.jpg") 

将其更改为

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

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


我在显示图像方面遇到了类似的问题。 作为rails的新手,我不知道我可以使用:

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

而不是传统的HTML。

image_tag在rails api中有解释,但我发现它的用法在这里有更好的解释: http://apidock.com/rails/ActionView/Helpers/AssetTagHelper/image_taghttp://apidock.com/rails/ActionView/Helpers/AssetTagHelper/image_tag

我添加到我的应用程序的所有内容都是这个gem: gem 'rails_12factor', group: :production

如heroku资产管道文档中所述。 https://devcenter.heroku.com/articles/rails-4-asset-pipeline


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

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

根据您使用的ERB或Sass, 不同的方式引用资产, 请参阅Ruby on Rails指南


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

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

RAILS_ENV=production bundle exec rake assets:precompile

commitpush送到服务器。


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

的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

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





heroku