Rails 4; помощник по ресурсам, не указывающий на активы с отпечатками пальцев (без загрузки в производство @Heroku)

Эта проблема сводит меня с ума... Я думаю, что я пробовал все мыслимые комбинации файла Sass, файла ERB, помощника по ресурсам, помощника изображения и т.д. и т.д. Кто-то, пожалуйста, дайте мне новые идеи!

Контекст:

Приложения Rails требуют использования помощников активов, поэтому, когда активы предварительно скомпилированы, источником будет файл с отпечатками пальцев. Если вы только что назовете img src= "X.jpg", сайт в производстве будет искать X.jpg, но файл в общедоступном/активе фактически был отпечатан пальцем как X-as; diofua; wemfiwaejfoiawefo.jpg. Единственный способ добраться до этого файла с отпечатками пальцев - использовать вспомогательный помощник, например, image_url ('X.jpg').

Прямо сейчас на моем живом сайте я использую вспомогательный помощник, но по какой-то причине он не указывает на отпечаток пальца. Обратите внимание, что активы находятся в разработке (но опять же, потому что в разработке нет отпечатка пальца).

код

Изображение под названием "classic-map.png", расположенное в app/assets/images/galleria

Изображение вызывается из файла css.erb, требуемого в файле application.css. В файле css.erb у меня есть следующий код:

background-image: url(<%= asset_path 'galleria/classic-map.png' %>);

Для справки http://guides.rubyonrails.org/asset_pipeline.html Обратите внимание, что я предпочитаю писать это как файл css.erb, следовательно, использовать путь asset_path и путь к ресурсам. Кроме того, я изначально думал, что проблема может быть в интерполяции, но в источнике страницы URL-адрес определенно работает, он просто указывает на url (galleria/classic-map.png) вместо url (galleria/classic- Карта-apsoidufalskjf; kasj.png)

Минус славы тому, кто может помочь!

Ответ 1

Я сидел с разработчиком Sr Rails, который все еще не мог помочь мне исправить это. Но обходной путь, который мы в конечном итоге использовали, состоял в том, что мы просто удалили отпечаток актива в общей папке вручную (поскольку fingerpoint - это то, на что указывает объект-помощник).

I.e., файл galleria/classic-map-587854758918434124.png мы просто вручную изменили на galleria/classic-map.png, и он отлично работает.

Обратите внимание: если вы сделаете это "взломать", в следующий раз, когда вы перекомпилируете активы, Rails создаст еще один отпечаток пальца, поэтому вы будете иметь дублирование, если вы не захотите каждый раз удалять дополнительный отпечаток пальца. Для меня, я не забочусь о дублировании, я забочусь о том, чтобы больше не думать об этом.

Ответ 2

Для чего это стоило, это случилось с AGAIN, и на этот раз я не мог использовать хак, потому что мне отчаянно нужен отпечаток. Так что как-то волшебным образом я провел rake assets:clobber и heroku run rake assets:clobber, чтобы очистить все активы, а затем прямо вверх git push, чтобы заставить Heroku выполнить предварительную компиляцию для меня. Это сделало это, и все работает.

Теперь, когда это произойдет, я собираю активы локально и в производстве и нажимаю, заставляя Heroku дистанционно прекомпилировать. Аналогично @user2880239 ответ. Я остановил предварительную компиляцию локально и проверил на git.

Ответ 3

Вы проверили RAILS_ENV?

bundle exec rake assets:precompile RAILS_ENV=production

Ответ 4

У меня была та же проблема, что и вы. Это сообщение в блоге помогло мне.

Я сделал несколько изменений в моем файле config/environments/production.rb, а именно...

config.serve_static_assets = true
config.action_dispatch.x_sendfile_header = ‘X-Accel-Redirect’
config.assets.compile = true

Обратите внимание, что вам может не понадобиться добавлять какие-либо из этих свойств, поскольку они могут быть предварительно установлены в false или просто закомментированы.

Затем я сделал танец героику:

rake assets:precompile
git add .
git commit -m "Fix static assets"
git push
git push heroku

Ответ 5

У меня такая же проблема. Я даже попробовал помощника с консоли rails от героку, и помощник прекрасно работает там!

$ heroku run rails console
Running `rails console` attached to terminal... up, run.8071
Loading production environment (Rails 4.1.7)

irb(main):001:0> puts helper.image_path("bg.jpg")
/assets/bg-00acfb7dbe138102509d82ac2313c24d.jpg

Моим окончательным "решением" было обновление config.assets.compile = true в config/environments/production.rb для возврата к непечатанному изображению.

Надеюсь, что это решение может помочь кому-то. И если бы у вас было какое-то реальное решение, сообщите мне об этом!