Rails 3.1 Static Asset - должны ли активы предварительно скомпилироваться для производства?

Мое понимание нового конвейера ресурсов Rails 3.1 в производственном режиме выглядит следующим образом: ->

  1. config.action_controller.asset_host = "https://mybucket.s3.amazonaws.com"
  2. config.assets.compile = false
  3. app/assets проверены в репо
  4. связать активы exec rake: прекомпилировать и синхронизировать с S3 (все активы)
  5. public/assets НЕ проверено в репо

Учитывая все вышесказанное, я подумал, что Rails будет искать все ресурсы на S3, и они мне не нужны в хранилище. Или, по крайней мере, мне не нужны предварительно скомпилированные ресурсы в public/assets в репозитории.

Я нашел это, на герою, если у него нет config.assets.compile = true, он не найдет предварительно скомпилированные ресурсы на S3 , И Heroku должен пройти через фазу компиляции для всех ресурсов, но затем выведет их из S3. Запуск heroku run rake assets:precompile не делает приседания. Производственный процесс снова все скомпилирует.

А? Это не имеет смысла для меня.

Я бы понял, что вам не нужно заполнять репозиторий изображениями, пусть ваш CDN сделает всю работу.

У меня такое чувство, что это неправильно. Я прав или нет?

7 голосов | спросил Karl 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 06 Sep 2011 22:15:21 +0400 2011, 22:15:21

6 ответов


0

Когда у вас есть этот набор:

config.assets.compile = false

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

Ознакомьтесь с руководством по настройке конвейера ресурсов на сайте Heroku, так как есть специальная настройка для заставить его работать.

ответил Richard Hulse 12 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 12 Sep 2011 11:00:26 +0400 2011, 11:00:26
0

Обязательно посмотрите asset_sync на github. Или в нашей статье в Центре разработки Heroku Использование хоста с активами CDN с Rails 3.1 в Heroku .

Проблемы с переменными среды недавно были решены с помощью плагина Heroku labs, который делает heroku configвашего приложения. > переменные, доступные во время компиляции. Чтобы включить это, прочитайте о user_env_compile . Это означает, что вам больше не нужно запускать heroku run rake assets:precompile после развертывания приложения.

Кроме того. Использование asset_sync значительно улучшило производительность, позволяя вашему приложению лениво компилировать ресурсы в рабочем режиме или обслуживать их предварительно скомпилированными непосредственно с серверов приложений. Однако я бы сказал это. Я написал это.

  • С помощью asset_sync и S3 вы можете предварительно скомпилировать ресурсы, что означает, что все активы готовы к немедленному обслуживанию на хосте активов /CDN
  • Вам может потребоваться только пакет : assets в application.rb для предварительной компиляции, что экономит память в рабочей среде
  • Ваши серверы приложений НИКОГДА не попадают под запросы активов. Знаете, вы можете тратить много времени на вычисления. Вычислительный.
  • По умолчанию все заголовки кеша HTTP установлены по умолчанию
  • Вы можете включить автоматическое сжатие gzip с помощью одной дополнительной конфигурации
ответил David Rice 7 MarpmWed, 07 Mar 2012 19:50:59 +04002012-03-07T19:50:59+04:0007 2012, 19:50:59
0

По причинам, которые я никогда не пойму, я не могу пометить приведенный выше ответ как полезный - но у меня была та же проблема с моими активами в Amazon S3 и развертыванием моего приложения в Heroku.

Простая проверка в "public /assets /manifest.yml" позволила устранить ошибки "ресурс не был предварительно скомпилирован" в Heroku.

ответил Matthew Brewer 12 Jam1000000amThu, 12 Jan 2012 08:02:45 +040012 2012, 08:02:45
0

Настройка моего файла production.rb для включения 1) config.assets.precompile += %w( *.js *.css ) 2) config.serve_static_assets = true и 3) config.assets.compile = true помог мне.

Прежде чем включать эти ... в моей среде разработки были загружены все ресурсы JS /CSS, но в Production на Heroku их не было.

См. также: Ресурс JavaScript в Rails отсутствует после прекомпиляции

ответил ATSiem 14 Mayam13 2013, 05:58:52
0

Позвольте мне дать вам большой совет, сделайте это официальным способом Heroku:

http://devcenter.heroku.com/articles/cdn-asset- хост-rails31

https://github.com/rumblelabs/asset_sync

Он сделает все за вас, Heroku прекомпилирует, а затем гем asset_sync скопирует его в ваш каталог s3, а url_helpers просто сработает. Я полагаю, недостатком является то, что вам нужно запустить фазу прекомпиляции (но она копирует только при изменении материала), и вам нужно хранить свои активы в вашем git-репо.

ответил Amala 7 WedEurope/Moscow2011-12-07T20:07:29+04:00Europe/Moscow12bEurope/MoscowWed, 07 Dec 2011 20:07:29 +0400 2011, 20:07:29
0

Я думаю, что происходит то, что он ищет manifest.yml, чтобы узнать, были ли скомпилированы ресурсы. Поскольку этот файл по умолчанию находится в public /assets и вы не проверяете это в своем репо, предполагается, что ресурсы не были скомпилированы. Попробуйте изменить местоположение файла в config/environments/production.rb и посмотрите, решит ли это проблему

ответил 33hours 14 WedEurope/Moscow2011-12-14T04:35:52+04:00Europe/Moscow12bEurope/MoscowWed, 14 Dec 2011 04:35:52 +0400 2011, 04:35:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132