javascript включает Создание тега Rails 4 "/ javascripts / "вместо" / assets " в производстве

у меня есть приложение Rails 4 с

<%= javascript_include_tag "modernizr", "data-turbolinks-track" => true %>

в голову. В разработке визуализируется следующий HTML и загружается modernizr:

<script data-turbolinks-track="true" src="/assets/modernizr.js?body=1"></script>

в производстве отображается следующий HTML-код, а modernizr -не загружено (404 не найдено):

<script data-turbolinks-track="true" src="/javascripts/modernizr.js"></script>

производства /assets/modernizr.js найден и доступен для просмотра.

на Rails документация говорит о том, что javascript_include_tag должны создать

<script data-turbolinks-track="true" src="/assets/modernizr.js?body=1"></script>

в производстве, мой stylesheet_link_tags в порядке, ссылки на .

почему javascript_include_tag привязка к /javascripts вместо /assets в производстве, и как я могу это исправить?

5 ответов


один из операторов использования для AssetUrlHelper указывает, что он будет производить/ javascripts / urls как то, что вы видите:

# asset_path "application", введите: :javascript # => /javascripts/application.js

(от asset_url_helper.линия 117 РБ - [1])

этот код выглядит так, как будто он может быть достигнут, только если предварительно скомпилированный актив отсутствует таким образом, кажется, что ваша компиляция активов не работает (мои развертывания обычно не когда это происходит, поэтому, возможно, ваш даже не стреляет).

тот же asset_url_helper.rb вызывает /javascripts / part 'extname' и использует следующую карту, чтобы узнать, как создать имя:

 # Maps asset types to public directory.
  ASSET_PUBLIC_DIRECTORIES = {
    audio:      '/audios',
    font:       '/fonts',
    image:      '/images',
    javascript: '/javascripts',
    stylesheet: '/stylesheets',
    video:      '/videos'
  }

новое приложение Rails 4 имеет это в конфигурации/средах / производстве.rb

  # Do not fallback to assets pipeline if a precompiled asset is missed.
  config.assets.compile = false

который, кажется, соответствует поведению, которое вы видите.


по умолчанию, только рельсы компиляцию application.js, application.css и любые изображения, которые он находит на пути активами. Поэтому в производстве mordernizr не будет предварительно скомпилирован, и, таким образом, помощники javascript не смогут найти файл.

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

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

для получения дополнительной информации см. направляющие рельсы


Не забудьте предварительно скомпилировать свои активы в производстве, выполнив эту команду:

RAILS_ENV=production bundle exec rake assets:precompile

направляющий выступ рельсов на трубопроводе имущества может дать вам больше деталей:http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets


у меня есть новое приложение, использующее Rails 4, развернутое на Heroku с:

<%= javascript_include_tag "application", "data-turbolinks-track" => true %>

мое приложение javascript.(фингерпринт.)js вызывается из src: assets / application.js

Я думаю, что ваша проблема исходит из чего-то в вашем производстве.rb, которые определяют активы из другого местоположения.

поэтому, возможно, вы можете добавить модернизацию.js to

конфиг.активы.предварительной компиляции = ['.js','.css','*.стиль CSS.erb']

in config / production.rb

или просто требуется сценарий modernizr в вашем приложении.js

/ / = требуется mordernizr

и удалите вызов сценария modernizr в свой макет.

<%= javascript_include_tag "modernizr", "data-turbolinks-track" => true %>

можете ли вы проверить, откуда ваше приложение.js подается в вашу производственную среду ?


Это может быть потому, что этот файл должен быть в /vendor/assets/javascript вместо /app/assets/javascript. Папка поставщика предназначена для библиотек javascript, а папка приложения-для вашего кода.

лучшим решением, чем добавление тега в макет, будет добавление ссылки на скрипт в ваше приложение.js и пусть компилятор Sass сжимает и прикрепляет его к вашему основному файлу javascript.

Если вы не получите окончательный ответ, проверить из: http://guides.rubyonrails.org/asset_pipeline.html#asset-organization