rails 4 не использует дайджесты в именах файлов ресурсов, а только в производстве - PullRequest
3 голосов
/ 13 февраля 2020

У меня есть приложение Rails 4, которое было недавно сильно обновлено (с точки зрения версий гемов и некоторых других вещей). Развертывания работали нормально, но как только мы очистили наши каталоги tmp, мы заметили, что активы перестали работать в производстве. По какой-то причине в производственном режиме происходит то, что помощники не используют дайджесты ни в одном из имен файлов ресурсов (например, /javascripts/application.js вместо /javascripts/application-some-digest.js). Это приводит к тому, что эти ресурсы равны 404, поскольку они существуют с собственными именами дайджестов в каталоге public, а Google App Engine настроен на независимое обслуживание файлов stati c для каталога publi c (который всегда работал нормально ). Что действительно странно, так это то, что в промежуточном режиме приложение все делает правильно, поэтому в нашей производственной среде есть нечто, заставляющее помощников не использовать дайджесты.

Даже страннее, если Я go RAILS_ENV=production rails console и делаю helper.asset_path 'application.js' Я получаю правильное имя файла с дайджестом. Что может происходить на земле?

И да, мы делаем RAILS_ENV=production rake:assets:precompile перед развертыванием.

Вот соответствующие части из config/environments/production.rb:

  config.eager_load = true
  config.assets.cache_store = :dalli_store
  # Don't force SSL because we need non-ssl cookies.
  config.force_ssl = false
  config.stripe_livemode = true
  config.assets.digest = true
  config.assets.compile = false

Вот соответствующие части от config/environments/shared.rb:

  # Disable Rails's static asset server (Apache or nginx will already do this)
  config.serve_static_files = false

  # Compress JavaScripts and CSS
  config.assets.compress = true

  # Don't fallback to assets pipeline if a precompiled asset is missed
  config.assets.compile = false

  # Generate digests for assets URLs
  config.assets.digest = true

  # Precompile additional assets (application.js, application.css, and all
  # non-JS/CSS are already added)
  config.assets.precompile += ['zxcvbn.js', 'hammer.min.js', 'jquery.ba-throttle-debounce.min.js', 'mediaCheck.js', 'application-no-mq.css', 'lte-ie7.js', 'mailcheck.js', 'browserconfig.xml', 'main.css', 'oamm.js', 'oamm.min.js']

Вот соответствующие части от config/application.rb:

    config.assets.precompile += %w( *.js ^[^_]*.css *.css.erb )

    # Enable the asset pipeline
    config.assets.enabled = true

    config.log_level = :info

    config.assets.precompile += ['rails_admin/rails_admin.css', 'rails_admin/rails_admin.js']

    # Version of your assets, change this if you want to expire all your assets
    config.assets.version = '1.0'

И, наконец, вот соответствующие части от config/environments/staging.rb который как-то работает нормально:

  # Speed up asset compilation on Heroku.
  config.assets.cache_store = :dalli_store
  config.eager_load = true

  config.stripe_livemode = false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...