Подтвердить что ты не робот

Активы Rails не прекомпилируются, css выглядит по-разному в производстве

Мое приложение rails в режиме dev работает и выглядит точно так, как я этого хочу, но в производстве он выглядит по-другому на хроме и сафари, в сафари загружаются изображения логотипов, но не шрифт, в хром загружается шрифт, но не изображение плюс поля ввода немного длиннее и неправильно выровнены в хроме, но в режиме dev все это выглядит великолепно в хроме.

Я некоторое время возился с этим и несколько раз удалял public/assets.

rake assets:precompile RAILS_ENV=production 

без успеха, прекомпиляция проходит без ошибок

конфиг/application.rb:

 # Settings in config/environments/* take precedence over those specified here.
 # Application configuration should go into files in config/initializers
 # -- all .rb files in that directory are automatically loaded.
 config.assets.paths << "#{Rails.root}/assets/fonts"
 config.assets.paths << "#{Rails.root}/assets/images"
 config.assets.paths << Rails.root.join("app", "assets", "fonts")
 config.assets.precompile += %w( .svg .eot .woff .ttf )


# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
# config.time_zone = 'Central Time (US & Canada)'

# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
# config.i18n.default_locale = :de
config.assets.enabled = true  
#config.assets.paths << "#{Rails.root}/app/assets/fonts" 

конфигурации/среда/производство:

# Code is not reloaded between requests.
config.cache_classes = true

# Eager load code on boot. This eager loads most of Rails and
# your application in memory, allowing both thread web servers
# and those relying on copy on write to perform better.
# Rake tasks automatically ignore this option for performance.
config.eager_load = true

# Full error reports are disabled and caching is turned on.
config.consider_all_requests_local       = false
config.action_controller.perform_caching = true

# Enable Rack::Cache to put a simple HTTP cache in front of your application
# Add `rack-cache` to your Gemfile before enabling this.
# For large-scale production use, consider using a caching reverse proxy like nginx,  varnish or squid.
# config.action_dispatch.rack_cache = true

# Disable Rails static asset server (Apache or nginx will already do this).
config.serve_static_assets = true
#config.assets.compile = true

config.assets.precompile =  ['*.js', '*.css', '*.css.erb', '*.css.scss'] 
# Compress JavaScripts and CSS.
config.assets.js_compressor = :uglifier
# config.assets.css_compressor = :sass
config.assets.paths << "#{Rails.root}/assets/fonts"
config.assets.paths << "#{Rails.root}/assets/images"
config.assets.precompile += %w( .svg .eot .woff .ttf )
config.assets.paths << Rails.root.join('app', 'assets', 'fonts')
# Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = false
config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/
# Generate digests for assets URLs.
config.assets.digest = true

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

Ответ 1

В вашем файле config/environments/production.rb установите:

config.serve_static_assets = false (в настоящее время он установлен в true)

config.assets.compile = true (в настоящее время он установлен в false)

Это должно решить вашу проблему.

Позвольте мне объяснить, что я прошу вас сделать.

  • Установив config.serve_static_assets = false, мы сообщаем серверу rails, не добавляем промежуточное ПО ActionDispatch::Static, которое используется для обслуживания статических активов.

Почему бы и нет?

Это потому, что в производственной среде вы должны запускать свой сервер приложений (например, puma) за веб-сервером (например, Apache/Nginx), который предназначен для непосредственного использования статических файлов (включая активы), без необходимости отправлять запрос на сервер приложений rails.

Поскольку вы не используете какой-либо веб-сервер, мы отключим его.

  • Установив config.assets.compile = true, мы сообщаем рельсам для компиляции запрошенного актива во время выполнения. то есть искать требуемый актив в app/assets, vendor/assets, lib/assets и обслуживать его, если он найден из любого из этих местоположений.

По умолчанию config.assets.compile - true в разработке, false в рабочей среде. Поскольку мы не используем веб-сервер для обслуживания статических активов, мы просим рельсы жить в компиляции наших активов.

Подробнее см. в документации > .