Javascript не прекомпилирован?

в моем app/assets/javascripts/specific.js У меня

//= require_tree ./specific

in app/assets/javascripts/specific/chat У меня есть pusher.js

Кроме того, в config/environments/production у меня есть

config.assets.precompile += %w( specific.js some_other_manifest.js )

Однако, когда я вхожу в производство (по героку), он все еще жалуется, что pusher.js не прекомпилирован. Что я здесь делаю неправильно?

Пока приложение развертывается, файлы javascript, кажется, скомпилированы.

из журналов Heroku:

   Compiled specific/chat/pusher.js  (0ms)  (pid 1042)
   Compiled specific.js  (60ms)  (pid 1042)

Но когда я перехожу к просмотру,

 ActionView::Template::Error (specific/chat/pusher.js isn't precompiled):
     1: <%= javascript_include_tag 'specific/chat/pusher' %>
     2: <%= javascript_include_tag params[:controller] %>
     3: 
     4: <div id="chat-header">
   app/views/messages/index.html.erb:1:in `_app_views_messages_index_html_erb___3285714722884343394_70246542189040'

Я также попытался добавить config.assets.precompile .. вариант внутри config/application.rb вместо production.rb

Связанные: Активы говорят "не предварительно скомпилированные" когда они предварительно скомпилированы

Когда я запускаю assets:precompile и смотрю в папке public/assets, я вижу, что все они предварительно скомпилированы (например, specific-bfgbfbf4534535.js)

Таким образом, актив фактически предварительно скомпилирован, но ошибка говорит, что он не прекомпилирован

С моей точки зрения:

<%= javascript_include_tag 'specific/chat/pusher.js' %>

Ответ 1

Вы не включаете определенные файлы, вы включаете весь манифест, чтобы весь смысл манифестации.

Это не может работать:

<%= javascript_include_tag 'specific/chat/pusher' %>

Вместо этого вам понадобится один include для манифеста верхнего уровня:

<%= javascript_include_tag 'specifics' %>

Из вашего комментария ниже вашего вопроса:

Он не должен быть включен в application.html.erb

Это не то, как работают прекомпилированные активы. Вам нужно включить specifics.js или создать другой (более подробный) манифест. Пункт манифестации заключается в том, что они производят один миниатюрный код кода, который должен быть включен. Вы говорите, что в папке скомпилированных активов вы видите specific-bfgbfbf4534535.js; то есть файл, который будет включен, и содержит pusher.js.

Ответ 2

попробуйте предварительно скомпилировать все активы:

config.assets.precompile += %w( *.css *.js )