Rails 4 изображения не загружаются на героку
Я потратил большую часть дня, пытаясь получить изображения для загрузки моего приложения heroku. Все, что я пробовал, работает локально, но не после того, как его развернули в герою.
У меня есть файлы png, сохраненные в папке с изображениями под моими активами. Я ссылаюсь на эти изображения с синтаксисом в моем CSS, например:
#signin {
background: url(<%= asset_path 'sf.png' %>);
background-size: 100%;
}
В heroku, когда я проверяю фон, ссылка assets/sf.png есть, но когда вы нажимаете на нее, она показывает сломанное изображение, предполагая, что оно не загружается должным образом.
Я попытался переключить config.serve_static_assets = false
в файл production.rb
между true и false и не работает.
У меня также есть
group :production do
gem 'pg'
gem 'rails_12factor'
end
Прекомпиляция всегда успешна.
Rails 4. Любые идеи о том, что еще попробовать?
Ответы
Ответ 1
Другая проблема, с которой я столкнулась, заключалась в том, что я предварительно собирал свои ресурсы локально, прежде чем загружать ее в герою. Это требует, чтобы вы выполнили другой набор шагов, который можно найти ниже. Если вы предварительно скопируете свои ресурсы локально, вы должны выполнить следующие действия или любые обновления, сделанные вами в папке с вашими активами, не будут отражены в продуктах.
https://devcenter.heroku.com/articles/rails-asset-pipeline
RAILS_ENV=production bundle exec rake assets:precompile
commit
и push
на сервер.
Ответ 2
Мне нужно было объединить несколько решений для выполнения этой работы, вот что я сделал:
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
Мне не нужно было предварительно компилировать активы локально.
Ответ 3
Вам нужно сделать две вещи, чтобы решить эту проблему.
Сначала измените эти две строки от false до true в файле production.rb
.
config.assets.compile = true
config.assets.digest = true
Во-вторых, если у вас такой синтаксис для ваших изображений
background: url("imgo.jpg")
Измените его на
background: image-url("image.jpg")
Я надеюсь, что это сработает.
Ответ 4
У меня была аналогичная проблема, и я решил ее со следующей строкой в custom.css.scss.. Скажите, если это сработает для вас.
background: image-url('sf.png')
Ссылка на актив осуществляется разными способами в зависимости от того, используете ли вы ERB или Sass, в руководстве по Ruby on Rails.
Ответ 5
У меня нет репутации для комментариев (пока), но важно отметить, что функция лаборатории Heroku была удалена, поэтому теперь вы получите сообщение об ошибке "Нет такой функции: пользователь-env-compile"
Подробнее: https://github.com/Crowdtilt/CrowdtiltOpen/issues/251
Ответ 6
Rails ('4.1.5') У меня была аналогичная проблема с изображениями, которые не отображаются на Heroku, но появляются локально. Я не использую самописцы из скрепки или носителей, я предварительно скомпоную локально, а также используя RAILS_ENV = production Я нажимаю на 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
скопированные изображения в общедоступные/активы из приложения/активов. затем:
// tests should pass
bundle exec rake assets:precompile --trace
RAILS_ENV=production bundle exec rake assets:precompile --trace
git commit
git push
И он отлично работал на Heroku.
Ответ 7
У меня была аналогичная проблема с показом только изображений. Будучи новичком в рельсах, я не знал, что могу использовать:
<%= image_tag("fileName.png", alt: "File Name Fancy", size: "100x100")%>
Вместо традиционного html.
image_tag объясняется в rails api, но я считаю, что его использование лучше объясняется здесь:
http://apidock.com/rails/ActionView/Helpers/AssetTagHelper/image_tag
Все, что я добавил в мое приложение, было этим камнем:
gem 'rails_12factor', group: :production
Как описано в документации по конвейеру активов heroku. https://devcenter.heroku.com/articles/rails-4-asset-pipeline
Ответ 8
Я попробовал много решений, но я нашел бесценное решение и объяснение
1. Heroku ищет активы в общей папке, и это означает, что вы должны предварительно скомпилировать свои активы, но если бы вы были похожи на меня, то кто-то искал способ прекомпилировать мои активы, когда моя среда разработки установлена в gem sqlite, а производственный набор - pg то вы сделаете это.
в вашем production.rb
config.serve_static_assets = true
Если у вас нет установленного gem pg, вам нужно прокомментировать его и изменить производственную среду, чтобы использовать gem sqlite и запустить этот
RAILS_ENV=production bundle exec rake assets:precompile
когда все активы были предварительно скомпилированы, вернитесь к своим настройкам по умолчанию и git добавьте., зафиксируйте и нажмите на герою
Ответ 9
Изображения не будут использоваться как активы по умолчанию, только css и js. Вы должны заглянуть в ответ
Syed Ehtsham Abbas в этом вопросе
Heroku НЕ компилирует файлы под конвейерами ресурсов в Rails 4