【问题标题】:rails openshift image-path not workingrails openshift图像路径不起作用
【发布时间】:2014-09-04 10:01:53
【问题描述】:

我对样式表文件中的图像有疑问。这是描述:

我正在使用 rails 4.1.1 和 sass 4.0.3,我正在部署 OpenShift。我需要在我的 scss 文件中提供图像 url。我阅读了很多文档,但找不到答案。

我发现了这个:

2.3.2 CSS and Sass

When using the asset pipeline, paths to assets must be re-written and sass-rails provides -url and -path helpers (hyphenated in Sass, underscored in Ruby) for the following asset classes: image, font, video, audio, JavaScript and stylesheet.

image-url("rails.png") becomes url(/assets/rails.png)
image-path("rails.png") becomes "/assets/rails.png". 
The more generic form can also be used:

asset-url("rails.png") becomes url(/assets/rails.png)
asset-path("rails.png") becomes "/assets/rails.png"

我在 app/assets/images 中有图片!

所以在我的 scss 文件 (main.css.scss) 中我使用的是这个:

background: url(image-path('clothes-line.jpg'));

在开发模式下一切正常,但在 openshift 的生产环境中,它不会在图像 url 的末尾添加哈希。所以网址是:

background-image: url("/assets/clothes-line.jpg");

但应该是:

background-image: url("/assets/clothes-line-d8c5459295983599e58ddb8f7e6aa010.jpg");

我不知道为什么。我尝试了预编译资产,增加资产版本号,更改一些配置。没有任何帮助。

请你帮帮我。

更新:

好的,这是我正在处理的网络:

http://origi-railsshop.rhcloud.com/

在标题是黑色背景,因为图像丢失。使用一些工具来查看 css,例如 Firebug。

background-image: url("/assets/clothes-line.jpg");

尝试编辑和添加哈希:

background-image: url("/assets/clothes-line-d8c5459295983599e58ddb8f7e6aa010.jpg");

它将加载图像。

已解决(直到 8 小时才能发送答案,所以我把答案放在这里):

所以现在可以了。

遗憾的是,我不确定是什么原因造成的。我使用了配置和 rhc 工具,它在我触发命令后开始工作:

rhc app deploy -a <app_id> --ref <commit_id>

我在 config/enviroments/production.rb 中也有未注释的行:

config.assets.css_compressor = :sass

我也在同一个文件中玩过:

config.assets.compile

但是我在这里找到了关于asset.compile的很好的描述:http://blog.55minutes.com/2012/02/untangling-the-rails-asset-pipeline-part-3-configuration/

然后我将其切换回 false。因为在生产中它应该是假的,否则它会在浏览器发出请求时即时预编译资产。

但是我现在无法重现我的问题,所以我不确定这些操作中的哪一个。

感谢您的回答。

【问题讨论】:

  • 为什么不能简单地使用背景:image-url("clothes-line.jpg")?
  • 因为预编译后没有名字为clothing-line.jpg的图片。资产管道在最后自动添加指纹。所以在我的公用文件夹中是 assets 文件夹,里面是这样的图像 Clothing-line-d8c5459295983599e58ddb8f7e6aa010.jpg。
  • 您的图片在公共文件夹中吗?
  • 是的,我在 /public/assets/ 中有预编译的图像。这是该图像的 URL:origi-railsshop.rhcloud.com/assets/…
  • 我遇到了同样的问题。 config.assets.compile = true 为我解决了!非常感谢。

标签: ruby-on-rails sass openshift assets


【解决方案1】:

您需要将图片放在 app/assets/images 文件夹中才能使用 rails 资产管道。如果您的图片在 app/assets/images 中文件夹,然后您可以使用 rails asset_path or image-url(in case of scss) helpers。 Rails 会在生产中自动为您创建正确的路径,您可以将背景设置为

 background-image: image-url("clothes-line.jpg");

【讨论】:

  • 感谢您的回答,但我在 app/assets/images 中有图片。否则将显示错误 Sprockets::FileNotFound。所以它并没有解决我的问题。
  • @user1263663 我问你,如果你把你的图像放在公共文件夹中,你说是的。你在你的 scss 中尝试过background-image: image-url("clothes-line.jpg"); 吗?
  • 不,我写的是我已经在 /public/assets 中预编译了图像。我在 app/assets/images 中的原始图片。
  • 好吧,我的错。如果您的图片在 app/assets/images 中,那么 image-url 将起作用
  • 应该,但不是。我怀疑这是一些 openshift 配置或缓存,或者我不知道。
【解决方案2】:

我迟到了,但我也遇到了图像 url 无法在 openshift 上运行的问题,尽管已预编译。

当然,正如 @Mandeep 所说,您必须添加 image-url 作为您的 sass 助手,以便为您的产品生成图像 url 以及 signature

我猜,这是openshift 上的一个错误,它没有检测到scss 文件,并且当资产被预编译时,我没有看到/assets/image_name-13048eff72a1570dc740b7767eeb3181.png 的图像路径,而是/assets/image_name.png

我决定不在 openshift 上预编译它,而是在本地预编译并推送。为此,您必须添加disable_asset_compilation。 您可以通过 touch .openshift/markers/disable_asset_compilation 执行此操作,然后在本地预编译资产 RAILS_ENV-production rake assets:precompile 并使用新添加的标记推送您的资产。它应该一切正常,没有任何问题。

希望对您有所帮助。

【讨论】:

    【解决方案3】:

    基于此https://github.com/twbs/bootstrap-sass/issues/704#issuecomment-54047730,openshift 在预编译资产时缺少值为“production”的 RAILS_ENV 变量

    解决问题:

    1. 登录 openshift ssh 帐号
    2. 然后运行以下不带引号的命令“echo production > .env/user_vars/RAILS_ENV”
    3. 对任何应用程序本地文件进行任何更改,重新推送 git

    【讨论】:

    • 这也为我解决了这个问题。感谢您指出解决方法。
    • 也为我解决了这个问题,即使它已经一岁了。
    猜你喜欢
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多