2013-08-19 3 views
59

Я потратил большую часть дня, пытаясь получить изображения для загрузки моего приложения heroku. Все, что я пробовал, работает локально, но не после того, как его развернули в герою.Rails 4 изображения не загружаются на heroku

У меня есть файлы png, сохраненные в папке с изображениями под моими активами. Я ссылаюсь на эти образы с синтаксисом в моем CSS, например;

#signin { 
    background: url(<%= asset_path 'sf.png' %>); 
    background-size: 100%; 
} 

В Heroku, когда я проверить фон ссылка активы/sf.png есть, но при нажатии на нее она показывает разбитое изображение, предполагая, что не сработал должным образом.

Я попытался переключить config.serve_static_assets = false в файл production.rb между true и false и ни один из них не работает.

У меня также есть

group :production do 
    gem 'pg' 
    gem 'rails_12factor' 
end 

Прекомпиляция всегда успешно.

Рельсы 4. Любые идеи о том, что еще попробовать?

ответ

25

Еще одна проблема, с которой я сталкивался, заключалась в том, что я предварительно собирал свои активы локально, прежде чем загружать их в герою. Это требует, чтобы вы выполнили другой набор шагов, который можно найти ниже. Если вы предварительно скопируете свои активы локально, вы должны выполнить следующие действия или любые обновления, сделанные вами в папке с вашими активами, не будут отражены в prod.

https://devcenter.heroku.com/articles/rails-asset-pipeline

RAILS_ENV=production bundle exec rake assets:precompile

commit и push к серверу.

+0

спасибо, что отлично поработало для моих vps тоже. – rmagnum2002

-1

Изображения не будут использоваться как активы по умолчанию, только css и js. Вы должны смотреть в ответ на

Сайед Ehtsham Аббаса в этом вопросе Heroku does NOT compile files under assets pipelines in Rails 4

+0

, который работал изначально, но после другой перекомпиляции и другой перезагрузки он сломался – brad

+0

@brad вы можете разместить свою конфигурацию продукта? – nXqd

87

мне нужно объединить несколько решений, чтобы сделать эту работу, вот что я сделал:

Gemfile

gem 'rails_12factor', group: :production 

in my Консоль 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 

мне не нужно прекомпилировать активов на местном уровне.

+0

спасибо, работает как шарм – AlaskaKid

+0

Спасибо! Оно работает! – jizak

+21

У меня уже был драгоценный камень, но кроме этого, 'config.assets.compile = true' хватило для меня. Запуск Ruby 2.0, Rails 4.0, на стек кедра EU. – zykadelic

12

У меня была аналогичная проблема, и я решил ее со следующей строкой в ​​custom.css.scss .. Скажите, если это сработает для вас.

background: image-url('sf.png') 

Реферирование актива делается различными способами в зависимости, если вы используете Еврорадио или Sass, see in the Ruby on Rails Guide.

+1

Это решило это для меня, спасибо! – user3408293

+0

Это сработало и для меня. Я изначально имел: 'background: url (file.png)' Изменение его на 'background: image-url ('file.png')' сделал трюк. –

+0

Это настоящее решение. – samuelkobe

3

У меня нет репутации, чтобы комментировать (пока), но важно отметить, что функция лаборатории Heroku была удалена, поэтому теперь вы получите ошибку «Нет такой функции: пользователь-env-compile»

Подробнее: https://github.com/Crowdtilt/CrowdtiltOpen/issues/251

47

Чтобы решить проблему, вам нужно сделать две вещи. Сначала измените эти две строки от false до true в файле production.rb.

 config.assets.compile = true 
     config.assets.digest = true 

Во-вторых, если у Вас есть синтаксис, как это для ваших изображений

background: url("imgo.jpg") 

Изменение его

 background: image-url("image.jpg") 

Я надеюсь, что он делает свою работу.

+0

Это сработало для меня :) –

+2

Да! ! Для меня ничего не работало, но это делалось (установка 'config.assets.compile' в' true'). –

+0

Да, это сработало и для меня! Благодаря! Конфигурирование: config.assets.compile = true – SaintClaire33

1

У меня была аналогичная проблема с отображением только изображений. Будучи новым рельсам я не знаю, что я мог бы использовать:

<%= image_tag("fileName.png", alt: "File Name Fancy", size: "100x100")%>

Вместо традиционного HTML.

IMAGE_TAG объясняется в апи рельсах, но я считаю его использование лучше объяснить здесь: http://apidock.com/rails/ActionView/Helpers/AssetTagHelper/image_tag

Все, что я добавил в мое приложение был этот перл: gem 'rails_12factor', group: :production

Как описано в Heroku актива документация. https://devcenter.heroku.com/articles/rails-4-asset-pipeline

3

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.

1

Я пробовал много решений, но я нашел неоценимое решение и объяснение. 1. Heroku ищет активы в общей папке, а это значит, что вы должны предварительно скомпилировать свои активы, но если бы вы были похожи на меня, кто-то искал способ для предварительной компиляции моих активов, когда моя среда разработки установлена ​​в gem sqlite, а производственный набор на pg, тогда вы это сделаете.

в вашем производстве.Р.Б.

config.serve_static_assets = true 

, если вы не установили камень стр вам нужно закомментировать и изменить свою производственную среду, чтобы использовать драгоценный камень SQLite и запустить этот

RAILS_ENV=production bundle exec rake assets:precompile 

, когда все активы были прекомпилированы, переключитесь к вашим настройкам по умолчанию и git add., commit и push to heroku

Смежные вопросы