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

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

Ответы [ 2 ]

3 голосов
/ 28 мая 2011

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

Rails.application.config.assets.paths

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

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

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

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

Конкатенация является отдельной задачей.Sprockets будет искать в пути загрузки ресурсы, которые вы указали с помощью директив Sprockets require и provide, и строит объединенные файлы из них.

1 голос
/ 26 мая 2011

Кажется, нет простого способа сделать это. В 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.

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

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

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

...