Сбой компиляции активов в серверной среде с помощью: «NoMethodError: undefined method» [] 'для nil: NilClass "

17

Я вытаскиваю волосы за это. У меня всегда были плохие отношения с конвейером активов, это всегда давало мне проблемы .. И сегодня снова ..

Когда я пытаюсь скомпилировать свои ресурсы локально, все в порядке:

$ RAILS_ENV=production rake assets:precompile --trace

Но когда я развертываю с Capistrano, который делает:

cd /var/www/xxx/releases/20140717164232 && ( RAILS_ENV=production bundle exec rake assets:precompile )

Он выходит из строя со следующей ошибкой:

rake aborted!
NoMethodError: undefined method '[]' for nil:NilClass
  (in /var/www/xxx/releases/20140717164232/app/assets/stylesheets/application-sign-in.css)
/var/www/xxx/shared/bundle/ruby/2.1.0/gems/sprockets-2.11.0/lib/sprockets/sass_functions.rb:63:in 'sprockets_context'

Я серьезно не знаю, как отлаживать это. Локально я не могу воспроизвести его, и на моем сервере ошибка просто не указывает на меня нигде.

Я искал ошибку и пробовал пару вещей, но ничего не помогло. Некоторые говорят, что ошибка уходит путем обновления. Или добавив драгоценный камень звездочек перед камнем сасс-рельсов.

Мой проект настроен следующим образом; Обычное rails 4 приложение с драгоценным камнем, содержащим активы, представляющие шаблон. Я использую следующую строку, чтобы убедиться, что все скомпилировано:

config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif *.css *.js *.eot *.woff *.ttf *.svg)

Кто знает, как это решить или как его отладить?

ИЗМЕНИТЬ

Удаление всего asset-url() помощника, похоже, сработает. Но опять же, не знаю, почему ..

    
задан Tim Baas 17.07.2014 в 18:58
источник
  • Хм, это странно. Вы объявляете переменную sass в application-sign.sss с []? –  Anthony 17.07.2014 в 19:21
  • Нет, не знаю. Я использую помощник resource-url (), который, кажется, создает проблему. –  Tim Baas 17.07.2014 в 19:37
  • , если вы используете Sass-разметку в этом файле, я бы переименовал его в application-sign-in.css.scss –  Anthony 17.07.2014 в 19:53
  • Ну, я действительно не знаю, что решило проблему. Сначала я переименовал все файлы в sass, в которых были помощники. В первую очередь это не сработало. Затем удалило все приложение и все развертывания с сервера и развернуто в пустой каталог, после чего оно было решено .. Я думаю, что какой-то старый материал что-то ломал. В любом случае, он работает сейчас, спасибо! –  Tim Baas 17.07.2014 в 20:22
  • Тим, я разделяю вашу ненависть к конвейеру активов. –  thedanotto 08.01.2016 в 00:07
Показать остальные комментарии

3 ответа

42

У меня была проблема samme, и она оказалась файлом css, содержащим asset-url , у которого не было расширения .scss . Сверху я мог компилировать активы локально, но не на сервере.

    
ответ дан Sharagoz 27.11.2014 в 23:22
источник
  • Я получил это сообщение об ошибке при обновлении с Rails 3 до Rails 4. Ошибка действительно заключалась в том, что один из включенных файлов был назван .css вместо .scss. В этом нет никакого актива-url. –  Henrik N 27.02.2015 в 22:57
  • Вы, ребята, спасатель. Это сводило меня с ума! –  Austin 28.08.2015 в 23:08
  • Спасибо, моя проблема была с font-url в .css, изменила его на .scss (rails 4) –  Jon 09.09.2015 в 12:31
  • Если проблема не была .scss, как она работала в Rails 3, то? Кажется, целью было бы сделать более поздние версии лучше / проще. –  JosephK 10.06.2016 в 04:31
  • Спасибо, спасибо, спасибо. В моем случае я добавил font_url в файл css: / grrr –  Bob Roberts 16.07.2017 в 05:47
1

проблема связана с расширением .css вместо .scss. Я изменил его на .scss, и он сработал.

    
ответ дан Neon_10 03.05.2015 в 19:10
источник
0

У Heroku есть сообщение об этом. Предварительно скопируйте его локально и добавьте все эти файлы, особенно /public/assets/manifest.yml , Heroku должен игнорировать предварительную компиляцию и продолжать.

    
ответ дан Breedly 05.04.2015 в 05:24
источник