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'
]

Любые идеи о том, что может вызвать это?


person elstgav    schedule 07.08.2014    source источник


Ответы (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)

И так далее.

Теперь имейте в виду, что если вы используете папки, отличные от ресурсов/изображений, ресурсов/таблиц стилей или ресурсов/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

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

person agmcleod    schedule 07.08.2014
comment
спасибо, но похоже, что проблема вызвана тем, что звездочки не распознают, что мне нужно перекомпилировать актив. Эти активы зависят от таблицы стилей из драгоценного камня. Драгоценный камень был обновлен, но не вызвал повторную компиляцию, поскольку сами файлы технически не изменились. Я собираюсь открыть новый вопрос для расследования. - person elstgav; 08.08.2014
comment
Ах. Возможно, стоит иметь rake assets:clean в вашем сценарии развертывания. Я думаю, что у нас на работе это обычно работает, но я не уверен. - person agmcleod; 08.08.2014