рельсы 3.1 некоторые активы не прекомпилируются на производстве - PullRequest
6 голосов
/ 17 ноября 2011

У меня возникли проблемы с Heroku, показывающим, что мой файл place.js не был предварительно скомпилирован, даже если я работаю в стеке кедра и во время компиляции слагов он выполняет задачу прекомпиляции rake. поэтому я попытался запустить его локально с rake assets:precompile RAILS_ENV=production, и действительно, rails не прекомпилировал мой /app/assets/javascripts/places.js.coffee.erb актив.

my production.rb использует конфигурацию rails 3.1 по умолчанию, и я даже попытался удалить .erb из ресурса, но безрезультатно.

Я также подумал, что поскольку мой ресурс place.js.coffee.erb НЕ включен в манифест звездочек (я включаю его вручную в мое приложение), возможно, он прекомпилирует только ресурсы в манифесте. Требование этого в манифесте тоже не сработало.

только мои application.js.coffee и `application.css прекомпилируются (с дайджестом и без него).

единственная проблема, которую я обнаружил, это, возможно, плохое регулярное выражение, используемое для сопоставления активов, но значение по умолчанию (?:\/|\\|\A)application\.(css|js)$ не соответствует моему активу, поэтому его следует включить.

Я не уверен, как устранить неполадки здесь. все в значительной степени по умолчанию. есть мысли о том, что здесь может происходить?

Ответы [ 3 ]

10 голосов
/ 18 ноября 2011

Во-первых, если вы хотите, чтобы файл компилировался, когда его нет в манифесте, вам нужно добавить его в параметр конфигурации прекомпиляции:

config.assets.precompile += ['places.js']

Во-вторых, можете ли выотредактируйте свой вопрос, чтобы включить ваш манифест - это может быть проблема синтаксиса.Я отредактирую этот ответ, если увижу, в чем проблема.

4 голосов
/ 19 декабря 2011

У меня была такая же проблема, и я решил ее следующим образом:

# add new file /app/assets/javascripts/places_manifest.js
//= require places

# add a line to config/application.rb
config.assets.precompile += ['places_manifest.js']

# in your views include places_manifest, not places
javascript_include_tag 'places_manifest'
1 голос
/ 14 февраля 2013

Хотя вышеприведенные решения кажутся нормальными, я удивляюсь, почему я должен это делать?

Как и все остальные, я получил ошибку в производственной среде, заявив, что мой недавно добавленный файл javascript не был предварительно скомпилирован.Однако я обнаружил, что это код в минимизированном файле application.css, сгенерированном Rails на моем рабочем сервере.

Проблема заключалась в том, что при разработке я подумал, что мне нужно будет добавить помощник javascript_include_tag кЗагрузите мой новый файл JavaScript.Добавление этого помощника стало источником моей конкретной ошибки.Я только что удалил его, и все отлично работало как в среде разработки, так и в рабочей среде.

Поэтому я предлагаю вам поискать признаки вашего нового файла .js в ваших уменьшенных файлах application.js, а не изменить любые другие файлы, как предложено выше решения.Пожалуйста, укажите на мои ошибки при необходимости;)

...