生产服务器上的Django(没有名为urls的模块)

时间:2014-08-03 18:19:15

标签: django django-urls production-environment django-settings dev-to-production

我在生产服务器上设置Django并出现这个奇怪的错误(如下图所示) 你可以看到pythonpath似乎没问题(第一行是我的项目文件夹),我的项目/项目文件夹中肯定有模块urls.py,我有 init 文件,我的ROOT_URLCONF =&# 39; project.urls'(我也试过没有项目名称,但它也没有帮助)。 所以,奇怪的是为什么它找不到它:( 我不得不说我试图在服务器上创建一个新项目然后它似乎没问题,但是这个项目是从本地服务器复制的,它表现得像这样。

错误的打印屏幕:

Error

2 个答案:

答案 0 :(得分:0)

实际上,您的项目看起来并不像您的项目。回溯仅显示Django包。

答案 1 :(得分:0)

我能想到的唯一问题是包创建过程。您在部署Django应用程序时遵循了哪些流程?

如果您已在本地计算机或CI服务器上编译了Django应用程序,然后部署了已编译的程序包,那么您将遇到导入模块问题,因为pyc文件将包含本地计算机或CI服务器的硬编码路径。要在编译python文件之前修复它,您应该在本地/ CI服务器上创建相同的层次结构,然后进行编译和部署。

希望这有帮助。

<强> [编辑]

我同意pyc文件中的硬编码路径是PITA,一旦我们发现它,我们就一直在我们的生产环境中这样做。

但是我不同意你在服务器上重新生成pyc文件,因为随着你的应用程序的增长而你向大型应用程序发展,它将变得非常缓慢。

您不必使开发环境目录遵循生产目录结构。相反,您可以在开发计算机上拥有任何目录路径,并创建一个单独的bash脚本,它将通过创建您在生产中遵循的目录结构为您创建一个包。 Bash脚本将具有

的逻辑
  • 创建类似于生产的目录结构
  • 从源代码管理中检出代码
  • 使用python -m compileall .
  • 编译代码
  • 创建tarball

您可以在生产服务器上解压缩此tar包,并且您的应用程序应运行正常。

有关python中的包创建和最佳实践的更多信息,请check out this video