Как я могу создать собственный сценарий со Sprockets, не являющийся частью обычного конвейера ресурсов Rails? - PullRequest
0 голосов
/ 25 апреля 2019

В Rails я хочу динамически генерировать JavaScript и загрузить его на S3.Прежде всего, мне нужно его сгенерировать.Мне нужно что-то вроде:

Sprockets.generateFile ("assets / application.js", {name: "John", age: 35})

, который будет генерировать строку вроде:

(function() {
  var data = {name: "John", age: 35};
  function thisComesFromMyAssets() {
    ...
  }
 function moreStuff() {
 }
})()

Затем я могу взять эту строку и загрузить ее на S3.

Я пытаюсь прочитать документы Sprockets и конвейера ресурсов, чтобы понять, как на самом деле это сделать.Кто-нибудь более знакомый знает, как?

1 Ответ

0 голосов
/ 25 апреля 2019

Сначала убедитесь, что это конвейер активов, который вы хотите использовать для этой задачи:

  1. Вы можете передавать пользовательские данные в js с помощью рендеринга встроенных js в html-шаблонах, которые обслуживаются этому пользователю, или использовать гем типа "gon" и хранить только общий код в скомпилированном js
  2. Кроме того, до всех проблем с генерацией + загрузкой + обслуживанием вы пробовали динамически обслуживать эти файлы, как обычные действия rails? JS - это просто текст, который легко выводится через ERB (action_name.js.erb)
  3. Если ваша задача состоит в создании множества автономных js-файлов с пользовательскими данными - лучше сделать это вне конвейера ресурсов (службы rake / activejob / PORO), потому что в этом случае эти файлы не имеют прямого отношения к вашим развертываниям. Вы также должны работать с версиями, потому что пользователи могут иметь устаревшие данные.
  4. Наконец, если задача действительно состоит в создании одного файла с некоторыми полудинамическими данными - конвейер ресурсов будет обрабатывать finename.js.erb, но имейте в виду, что он будет скомпилирован при развертывании, что приведет к соответствующим проблемам возраста данных
...