Rails 3.1: публичный каталог больше не обслуживает ресурсы js. Как загрузить дополнительный файл JS после загрузки страницы?

Я использую плагин jQuery, который загружает другой файл js с сервера после начальной загрузки страницы. Поскольку все ресурсы js объединяются в Rails 3.1, а общедоступный каталог не используется для обслуживания ресурсов js, как я могу ссылаться на этот файл? Куда я это положу?

2 ответа

Решение

Каждый актив в пути загрузки Sprockets доступен во время выполнения. Вы можете увидеть свой путь загрузки в консоли Rails с помощью

Rails.application.config.assets.paths

Вы можете добавить пути загрузки в инициализаторе:

Rails.application.config.assets.paths << your_load_path

По умолчанию все ресурсы в приложениях / активах / и поставщике / активах / загружаются автоматически. Эти активы должны быть расположены внутри каталогов. Файлы в самом каталоге assets / не загружаются.

Вы можете загрузить актив, расположенный на apps/assets/javascripts/myscripts/hello.js посетив http://mydomain.com/assets/myscripts/hello.js.

Конкатенация - это отдельная проблема. Звездочки будут искать в пути загрузки ресурсы, которые вы указали, используя Звездочки require а также provide директивы и строить сцепленные файлы из них.

Кажется, нет простого способа сделать это. В Rails 3.1 файлы JavaScript и CSS теперь объединяются в отдельные файлы для отправки в браузер. Это достигается с помощью библиотеки Sprockets.

Механизм для достижения этого включает в себя анализ файла./app/assets/javascripts/application.js и поиск директив Sprockets, которые сообщат Sprockets, где найти соответствующие файлы.

Новый файл application.js во вновь созданном приложении Rails выглядит следующим образом:

// FIXME: Tell people that this is a manifest file, real code should go into discrete files
// FIXME: Tell people how Sprockets and CoffeeScript works
//
//= require jquery
//= require jquery_ujs
//= require_tree .

Они выглядят как комментарии к JavaScript, но обрабатываются Sprockets как директивы, объясняющие, как создать один файл application.js, который будет доставлен клиенту. Вы, вероятно, можете догадаться, что это require_tree строка, которая добавляется в ваши файлы JavaScript.

По-видимому, нет большого количества документации относительно директив Sprockets. Однако исходный код хорошо документирован и очень хорошо объясняет доступные директивы.

require_tree Директива рекурсивно включает в себя все файлы в каталоге app / assets / javascripts. Поэтому вы можете достичь желаемого, создав подкаталог и разместив там файлы, которые вы не хотите включать. Вы можете изменить require_tree в require_path,

Альтернативой этому может быть ручное управление файлами, которые включены в Sprockets на индивидуальной основе, используя require filename для каждого необходимого файла JavaScript.

Другие вопросы по тегам