Как перезаписать файл расширенного набора JavaScript с помощью Docker? - PullRequest
0 голосов
/ 18 июня 2019

Когда я использую команду COPY в моем Dockerfile, чтобы перезаписать определенный файл (в этом случае я пытаюсь изменить предупреждение в редакторе SQLAlchemy, когда оно сохраняется, только одно из изменений, которые я хотите выполнить), изменения видны в коде и оболочке контейнера Docker, но не отображаются, когда я запускаю код.

В файле Docker я добавил командную строку копирования перед командой RUN, которая уже была в нашем файле Docker.

...
COPY actions.js /usr/local/lib/python3.6/site-packages/superset/static/assets/src/SqlLab/actions.js
RUN chmod +x /superset-init.sh

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

До:

export function saveQuery(query) {
  const url = '/savedqueryviewapi/api/create';
  $.ajax({
    type: 'POST',
    url,
    data: query,
    success: () => notify.success(t('Your query was saved')),
    error: () => notify.error(t('Your query could not be saved')),
    dataType: 'json',
  });
  return { type: SAVE_QUERY };
}

После того, как:

export function saveQuery(query) {
  const url = '/savedqueryviewapi/api/create';
  $.ajax({
    type: 'POST',
    url,
    data: query,
    success: () => notify.success(t('Your query was saved and stored')),
    error: () => notify.error(t('Your query could not be saved')),
    dataType: 'json',
  });
  return { type: SAVE_QUERY };
}

Как уже упоминалось, я пытался скопировать код с помощью команды docker COPY, но это не сработало. Это работало при копировании поверх стандартных файлов HTML, но не этих файлов JS.

КОПИЯ КОМАНДЫ

COPY actions.js /usr/local/lib/python3.6/site-packages/superset/static/assets/src/SqlLab/actions.js

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

UPDATE

Решение может заключаться в добавлении nvm, node и npm в мой dockerfile, чтобы можно было наблюдать за изменениями в моих файлах Javascript.

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

Добавление следующих строк в мой Dockerfile принесло изменения в внешний интерфейс .

RUN apt-get update && apt-get install -y \
  nano \
  curl \
...
# Install nodejs for custom build
# https://superset.incubator.apache.org/installation.html#making-your-own-build
# https://nodejs.org/en/download/package-manager/

RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \
    && apt-get install -y nodejs

RUN cd ../usr/local/lib/python3.6/site-packages/superset/static/assets \
    && npm install \
    && npm ci \
    && npm run build \
    && rm -rf node_modules

Как я понимаю, проблема заключалась в том, что изменения в моем внешнем интерфейсе не компилировались. Добавление этих строк в сборку компилирует изменения, внесенные в файлы JS или JSX.

Я добавил эти дополнения, посмотрев Dockerfile здесь: https://github.com/apache/incubator-superset/blob/master/contrib/docker/Dockerfile

Мне также пришлось добавить файл package.json , потому что тот, который присутствовал, имел неверные строки пакета.

COPY package.json /usr/local/lib/python3.6/site-packages/superset/static/assets/package.json
0 голосов
/ 19 июня 2019

Так что, если файл в контейнере в порядке (как вы сказали в комментарии выше), и вы все еще не можете видеть изменения в приложении, то я могу придумать только одну возможнуюпричина: вы очистили кэш или пересобрали приложение, чтобы учесть его?
Проверьте исходный код действующего приложения, и вы исправитесь.

...