Rails только прекомпилирует * некоторые * файлы на производстве
У меня странная проблема, когда только некоторые наши активы предварительно компилируются на производстве. наш application.css
файл компилируется и обновляется, но наш mobile.css
файл не был скомпилирован с июля, и сайт по-прежнему указывает на эту старую версию.
И все же, как ни странно, у нас нет этой проблемы в нашей постановке или в местных условиях. Все ресурсы предварительно скомпилированы, и последние версии представлены на сайте.
В июле мы обновили сайт до rails 4 и изменили нашу конфигурацию так:
# Rails 4 changed the precompile to only for app/assets. This will include vendor/assets
config.assets.precompile << Proc.new{|filename, path| %w(.png .gif .css .js .htc .svg .eot .woff .ttf).include?(File.extname(filename)) && path =~ /(\/lib\/assets)|(\/vendor\/assets)/ }
config.assets.precompile += [
'form.css',
'homepage.css',
…
#mobile
'common_mobile.css'
]
Любые идеи о том, что может вызвать это?
1 ответ
Так что обычно вам нужны файлы application.js & application.css для ссылки на все файлы css & js для их компиляции. Все, чего у вас там нет, должно быть в другом файле манифеста, который вы добавляете в путь прекомпиляции. Или что вы добавляете вручную к пути прекомпиляции.
Так что если у вас есть:
assets/
stylesheets/
application.css
styles/
mobile.css
Application.css включает все в папке стилей. Как должен выглядеть путь прекомпиляции:
config.assets.precompile += %w(mobile.css)
Теперь вы показали сканирование на различные расширения. Вы действительно можете добавить их в массив, вам не нужно брать полные пути к файлам или что-нибудь необычное.
config.assets.precompile += %w(mobile.css .css .eot .htc)
И так далее.
Теперь имейте в виду, что если вы используете папки, отличные от: assets/ images, assets/ stylesheets или assets/javascripts, добавьте папки, как вам нужно, в production.rb:
config.assets.paths << Rails.root.join("app", "assets", "fonts")
config.assets.paths << Rails.root.join("vendor", "assets", "audio")
Тогда подстановочные знаки в пути прекомпиляции вступят в игру.
Чтобы проверить это, просто настройте производство на своем компьютере и выполните команду rake:
RAILS_ENV=production bundle exec rake assets:precompile
И посмотрите на результат на публике. Я почти уверен, что для этой команды по умолчанию используется рабочая среда, но она может быть и явной.