Предварительная компиляция ресурсов Rails и конвейеры Heroku
Я развертываю свое приложение Rails с помощью Heroku Pipelines (это было надежно и быстро).
Однако, поскольку ресурсы предварительно компилируются только один раз, во время их развертывания на стадии подготовки, все продвигаемые ресурсы CSS в производственной среде содержат ссылки на изображения и шрифты в промежуточной сети CDN.
// Precompiled Source:
background-image: image-url('background.png');
// Compfiled Result:
background-image: url('https://stagingcdn.domain.com/assets/backgroundXXXXXXX.png');
Есть ли способ настроить Rails для вывода относительных путей для помощников asset-url(), а не абсолютного пути, содержащего домен asset_hosts?
Или какая-то форма фазы после продвижения, когда я могу снова запустить прекомпиляцию для производственных развертываний? Просмотр документов от Herkou ничего не подсказал, кроме перехода на гем синхронизации ресурсов, который они активно не поощряют в других местах.
Цените любой опыт или идеи.
2 ответа
Недавно у меня была такая же проблема, и я решил ее, очистив asset_host
перед assets:precompile
запущен.
Таким образом, вместо создания ссылок типа https://cdn.mysite.com/assets/cat-abc123.jpg
, это сгенерирует их как, /assets/cat-abc123.jpg
. Когда вы получаете доступ к таблице стилей черезhttps://cdn.mysite.com
, абсолютный путь будет разрешен относительно CDN, независимо от того, является ли он промежуточным или рабочим.
Я добился этого, поместив следующее в свой Rakefile после load_tasks
был вызван:
task :clear_asset_host do
Rails.configuration.action_controller.asset_host = nil
end
Rake::Task["assets:precompile"].enhance [:clear_asset_host]
Вы можете снова выполнить предварительную компиляцию рабочего приложения, выполнив следующие действия:
heroku run RAILS_ENV=production bundle exec rake assets:clobber
- Очистить существующие скомпилированные значения / имена в "общей" папке.
heroku run RAILS_ENV=production bundle exec rake assets:precompile
- Скомпилировать все заново.
Скорее всего, вам нужно будет делать это каждый раз, когда вы фиксируете новые активы на своем сервере Heroku.
Однако вам не следует запускать их на вашем локальном компьютере (разработка), если вы переходите к ресурсам по их имени в "общедоступной" папке в производственном приложении. Он изменит их "общедоступные" имена, когда вы снова скомпилируете их на своей производственной машине.