Ресурсы Ruby on Rails 3.1: прекомпиляция и изображения - PullRequest
8 голосов
/ 04 октября 2011

Я не могу заставить прекомпиляцию конвейера ресурсов Rails 3.1 работать в производственном режиме. Всегда происходит сбой на изображениях, на которые ссылается SCSS, с ошибкой типа:

$ bundle exec rake assets:precompile RAILS_ENV=production 
  rake aborted!
  rails.png isn't precompiled
    (in /home/florian/AssetTest/app/assets/stylesheets/application.css.scss)

Но когда я смотрю в каталог public / assets, изображение там, поэтому оно прекомпилируется:

  $ ls public/assets | grep rails 
    rails-dd352fc2630e5f9aa5685ef1d7fe5997.png

Файл SCSS в этом случае просто содержит тестовый код:

/*
 * This is a manifest file that'll automatically include all the stylesheets available in this directory
 * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
 * the top of the compiled file, but it's generally better to create a new file per style scope.
 *= require_self
 *= require_tree . 
 */

body {
   background: #ffffff image-url('rails.png') no-repeat 0 center;
}

Если я не использую помощник image-url в SCSS, а просто url ('/ assets / rails.png'), прекомпиляция работает нормально, а файл manifest.yml создается в public / assets.

Интересно то, что если я переключу SCSS обратно на image-url ('rails.png') и запустлю другую прекомпиляцию, он все равно будет работать (я полагаю, потому что изображение теперь уже указано в файле манифеста).

Что я здесь не так делаю? Я на самом деле не хочу игнорировать вспомогательные методы (так как их использование - это то, как вы должны это делать, верно?), И я определенно не хочу создавать файл манифеста вручную ...

1 Ответ

5 голосов
/ 04 октября 2011

Я сам столкнулся с той же проблемой. По-видимому, это ошибка в Rails 3.1.0, и мы надеемся, что она будет исправлена ​​в короткие сроки ...

В любом случае, в production.rb вы можете попробовать это:

config.assets.compile = true

Скорее всего, вы установили false, что должно . Однако его значение false вызывает проблемы, когда вы используете помощники активов в SCSS, как вы пытаетесь это сделать. Установка этого значения в true, по-видимому, правильно разрешает компиляцию при использовании этих помощников.

Посмотрите эту проблему на github для некоторых деталей.

...