rails openshift image-path不工作

时间:2014-07-14 13:12:10

标签: ruby-on-rails sass openshift assets

我在样式表文件中遇到图像问题。这是描述:

我正在使用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/

然后我把它改回假。因为在生产中它应该是错误的,否则它会在浏览器发出请求时动态预编译资产。

但是我现在无法重现我的问题所以我不确定这些行动中的哪一个就是那个。

感谢您的回答。

3 个答案:

答案 0 :(得分:3)

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

解决问题:

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

答案 1 :(得分:0)

您需要将图片放在 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");

答案 2 :(得分:0)

我迟到了,但我也面临着图片网址问题,尽管经过预编译,却无法在openshift上工作。

当然正如@Mandeep所说,你必须添加image-url作为你的助手帮助生成你的作品的图像网址以及signature

我想,它是openshift上没有检测到scss个文件的错误,当资产预编译时,我没有看到图像路径为/assets/image_name-13048eff72a1570dc740b7767eeb3181.png而是/assets/image_name.png {1}}。

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

希望有所帮助。