Django collectstatic在运行Github操作时一直在等待

Django collectstatic在运行Github操作时一直在等待,django,docker,continuous-deployment,github-actions,Django,Docker,Continuous Deployment,Github Actions,我们面临着一个非常奇怪的问题。我们在docker容器中通过每次推送上的Github操作发布django应用程序。除了collectstatic之外,一切正常 在CD github操作的末尾,我们有以下几行内容: docker exec container_name python manage.py migrate --noinput docker exec container_name python manage.py collectstatic --noinput migrate工作得非常好

我们面临着一个非常奇怪的问题。我们在docker容器中通过每次推送上的Github操作发布django应用程序。除了
collectstatic
之外,一切正常

在CD github操作的末尾,我们有以下几行内容:

docker exec container_name python manage.py migrate --noinput
docker exec container_name python manage.py collectstatic --noinput
migrate
工作得非常好,但是如果通过github操作运行,
collectstatic
只是继续等待。如果我直接在服务器上运行该命令,那么它工作正常,并在几分钟内完成

有人能帮我找出问题所在吗


提前感谢。

现在我远不是最有经验的人,但我最近做了这件事,我有一些建议可以去哪里找。但我绝对不是最权威的

我没有用docker,所以我不能说什么。从这些问题来看,我有一些建议可以推荐尝试

请注意,所有这些都是针对一个自托管跑步者的。否则情况将大不相同

  • 检查以确保在设置文件中正确设置了静态根变量和媒体根变量
  • 如果静态和媒体根变量是环境变量,请确保提供了正确的环境变量文件,如我使用的.env文件。
    • 我使用django环境为我的环境变量提供服务。从文档中,它表示.env文件与设置文件位于同一目录中。如果您使用github操作将项目放在生产服务器上,您将无法将.env文件放在项目中的任何位置,因为每次推送新代码时它都会被覆盖
    • 因此,要解决这个问题,您需要从服务器上的其他地方指定正确的.env文件。为此,请指定ENV_路径。
      • 在“多个环境文件”部分下
    • 另一个有用的资源是:
      • 我设置了我的设置文件,就像他们在那里做的那样
    • 我将.env文件放在项目的virtualenvironment文件夹中创建的proj目录中。
      • 我不知道这是否是个好地方,但我就是这样做的。我在网上找不到很多关于这些东西的好信息。我得自己想办法
    • 确保运行github操作的用户具有读取.env文件的权限
  • 同样与.env文件类似,如果将静态文件收集到项目的基本目录中,那么每次推送新代码时,github操作都会覆盖这些文件,这可能会出现问题。如果您有一个用户上传文件的媒体目录,那么这将是一个真正的问题,因为这些文件不会被覆盖。他们会消失的。
    • 现在,如果这是一个问题,它不应该导致github操作仅仅停留在collect static命令上。这只会导致每次工作流运行时文件被覆盖,媒体文件将消失
    • 如果如前所述更改了静态文件和媒体文件所在的目录,请确保设置文件和.env文件中路径的所有变量都正确
    • 如果使用nginx,还需要更新静态和媒体根目录的nginx配置文件。不确定apache是如何做到这一点的。
      • 您可以使用以下命令执行此操作:
      • sudo nano/etc/nginx/sites available/myproject
      • 完成此操作后,不要忘记重新启动nginx服务器
  • 如果要在服务器上的基本项目目录之外的其他位置写入静态文件和媒体文件,请同时检查这些目录上的权限。确保运行github操作的用户具有写入这些目录的权限。我怀疑这可能会导致它挂起,但很可能只是导致一个错误
  • 检查github操作yml文件中的所有语法。确保一切都是正确的,它没有挂起,因为它有一个不完整的命令或类似的东西
但是是的,这是一些我必须看的东西。老实说,这些都与你无关。所有这些问题在很大程度上都会导致错误

我不能提供太多的外部资源让你们深入了解这一点,因为我只是根据个人经验说的

希望我能帮忙

以下是我所做项目的github回购协议:


我使用nginx和gunicorn在linux服务器上的digitalocean上托管了它。

现在我远不是最有经验的人,但我最近做了这件事,我有一些建议可以在哪里查找。但我绝对不是最权威的

我没有用docker,所以我不能说什么。从这些问题来看,我有一些建议可以推荐尝试

请注意,所有这些都是针对一个自托管跑步者的。否则情况将大不相同

  • 检查以确保在设置文件中正确设置了静态根变量和媒体根变量
  • 如果静态和媒体根变量是环境变量,请确保提供了正确的环境变量文件,如我使用的.env文件。
    • 我使用django环境为我的环境变量提供服务。从文档中,它表示.env文件与设置文件位于同一目录中。如果您使用github操作将项目放在生产服务器上,您将无法将.env文件放在项目中的任何位置,因为每次推送新代码时它都会被覆盖
    • 因此,要解决这个问题,您需要从服务器上的其他地方指定正确的.env文件。为此,请指定ENV_路径。
      • 在“多个环境文件”部分下
    • 另一个有用的资源是:
      • 我设置了我的设置文件,就像他们在那里做的那样。