Рельсы openshift image-path не работает

У меня проблема с изображением в файлах стилей. Вот описание:

Я использую рельсы 4.1.1 и sass 4.0.3, и я развертываю в OpenShift. Мне нужно, чтобы URL-адрес изображения сервера в моих файлах scss. Я прочитал много документации, но не могу найти ответ.

Я нашел это:

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"

У меня есть изображения в приложении / активы / изображения!

Так что в моем файле scss (main.css.scss) я использую это:

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

В режиме разработки все работает просто отлично, но при работе с openshift он не добавляет хеш в конце URL-адреса изображения. Таким образом, 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 ответа

Решение

Вам нужно поместить ваши изображения в папку 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");

Основываясь на этом https://github.com/twbs/bootstrap-sass/issues/704, в openshift отсутствует переменная RAILS_ENV со значением "production" при прекомпиляции ресурсов

Решить проблему:

  1. Войти в openshift ssh аккаунт
  2. Затем выполните следующую команду без кавычек "echo production > .env/user_vars/RAILS_ENV"
  3. Внесите любое изменение в любой локальный файл приложения, отмените GIT

Я опоздал на это, но я также столкнулся с проблемой, когда URL изображения не работают на openshift несмотря на то, что предварительно скомпилированы.

Конечно, как сказал @Mandeep, вы должны добавить image-url как ваши нахальные помощники для создания URL-адреса изображения для вашего производства вместе с signature,

Я думаю, это ошибка на openshift что не обнаруживает scss файлы и когда ресурсы предварительно скомпилированы, я не видел путь к изображению как /assets/image_name-13048eff72a1570dc740b7767eeb3181.png вместо этого было /assets/image_name.png,

Я решил не получать его предварительно скомпилированным на openshift, а просто скомпилировать на локальном и push. Чтобы это работало, нужно добавить disable_asset_compilation, Вы можете сделать это touch .openshift/markers/disable_asset_compilation а затем прекомпилировать ресурсы локально RAILS_ENV-production rake assets:precompile и просто выдвиньте свои активы с недавно добавленным маркером. Все должно работать без проблем.

Надеюсь, это поможет.

Другие вопросы по тегам