Рельсы 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" при прекомпиляции ресурсов
Решить проблему:
- Войти в openshift ssh аккаунт
- Затем выполните следующую команду без кавычек "echo production > .env/user_vars/RAILS_ENV"
- Внесите любое изменение в любой локальный файл приложения, отмените 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
и просто выдвиньте свои активы с недавно добавленным маркером. Все должно работать без проблем.
Надеюсь, это поможет.