Подтвердить что ты не робот

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. Любые идеи о том, что еще попробовать?

4b9b3361

Ответ 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 добавьте., зафиксируйте и нажмите на герою