如何用Docker覆盖超集javascript文件?

时间:2019-06-18 14:50:21

标签: docker dockerfile apache-superset

当我在Dockerfile中使用 COPY 命令覆盖特定文件时(在这种情况下,我试图在保存时在SQLAlchemy Editor中更改警报,这只是其中一项更改我要执行),更改在代码和Docker容器外壳中可见,但在运行代码时不显示。

在docker文件中,我已经在dockerfile中已经存在的RUN命令之前添加了复制命令行。

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

我要复制的文件本身与所需的Dockerfile放在同一目录中,并进行了以下更改(不广泛,这只是为了确认更改已在实际处理中)< / p>

之前:

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函数所做的任何其他更改都应该可见。

更新

解决方案可能在于将nvm,node和npm添加到我的dockerfile中,以便监视对Javascript文件的更改。

2 个答案:

答案 0 :(得分:0)

因此,如果容器中的文件 正常(如您在上面的评论中所述),而您仍然看不到应用程序中的更改,那么我只能想到一个可能的原因:您是否已清除缓存或重新构建应用程序以便将其考虑在内?
检查实际运行的应用程序的源代码,您将得到解决。

答案 1 :(得分:0)

将以下行添加到我的 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