如何用 Docker 覆盖超集 javascript 文件?
How does one overwrite a superset javascript file with Docker?
当我在我的 Dockerfile 中使用 COPY 命令覆盖特定文件时(在这种情况下,我试图在保存时更改 SQLAlchemy 编辑器中的警报,只是我要执行的更改之一),更改在代码和 docker 容器 shell 中可见,但在我 运行 代码中不显示。
在 docker 文件中,我在 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 函数所做的任何其他更改都应该可见。
更新
解决方案可能在于将 nvm、node 和 npm 添加到我的 docker 文件中,以便监视我的 Javascript 文件的更改。
所以如果在容器中的文件没有问题(正如你在上面的评论中所说的)并且你仍然无法在应用程序上看到更改,那么我只能想到一个可能的原因:您是否清除了缓存或 re-build 应用程序以便将其考虑在内?
检查实际 运行 应用程序的源代码,您将得到修复。
将以下行添加到我的 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
当我在我的 Dockerfile 中使用 COPY 命令覆盖特定文件时(在这种情况下,我试图在保存时更改 SQLAlchemy 编辑器中的警报,只是我要执行的更改之一),更改在代码和 docker 容器 shell 中可见,但在我 运行 代码中不显示。
在 docker 文件中,我在 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 函数所做的任何其他更改都应该可见。
更新
解决方案可能在于将 nvm、node 和 npm 添加到我的 docker 文件中,以便监视我的 Javascript 文件的更改。
所以如果在容器中的文件没有问题(正如你在上面的评论中所说的)并且你仍然无法在应用程序上看到更改,那么我只能想到一个可能的原因:您是否清除了缓存或 re-build 应用程序以便将其考虑在内?
检查实际 运行 应用程序的源代码,您将得到修复。
将以下行添加到我的 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