如何将Django项目迁移到Pythonanywhere
我正在尝试在Pythonanywhere上搭建一个Django应用。我已经搞定了Bitbucket,并把代码克隆下来了。我删除了给我的目录里的文件,但就是无法让它正常工作。
我执行了'syncdb',然后当我访问我认为是应用的正确网址时,总是出现“未处理的异常”——错误提示是找不到'import'里的'portfolio.settings'(portfolio是这个应用的名字)。
我也不知道该怎么设置MEDIA_ROOT和STATIC_DIRS——据我所知,这些应该是完整路径,而不是相对路径。
我还是个Django新手,这个过程让我感到有点不知所措,因为这个应用在本地运行得很好,但部署到线上却很麻烦。任何帮助都非常感谢(我没找到Pythonanywhere的论坛——看起来也没什么人讨论,或者说帮助不太有用)。
我还想过:为什么不让Pythonanywhere为我设置一个空项目呢?但我还是不知道怎么处理STATIC_DIRS和MEDIA_ROOT,也不太清楚怎么让我的项目适应他们的设置。
谢谢任何帮助。
1 个回答
如果你遇到类似的问题:在网页应用中出现导入错误,通常是因为你的 sys.path
没有正确设置。你可以检查一下你的 WSGI 文件(在 PythonAnywhere 上,你可以在网页标签中找到它。其他主机可能会有不同的做法)。
举个例子:
/home/myusername/myproject/
是你的项目文件夹/home/myusername/myproject/my_cool_app/
是你其中一个应用的文件夹/home/myusername/myproject/myproject/settings.py
是设置文件的位置
你的 WSGI 文件应该包含:
sys.path.append('/home/myusername/myproject')
# ...
DJANGO_SETTINGS_MODULE = 'myproject.settings'
而你的 settings.py 文件应该包含:
INSTALLED_APPS = (
#...
'my_cool_app'
所有的内容都需要对齐,这样你在 INSTALLED_APPS
中的应用名称和你的 DJANGO_SETTINGS_MODULE
环境变量才能正确导入,这些都是相对于你添加到 sys.path 的文件夹来说的。
所以在上面的例子中,你可以这样做:
# wsgi file
sys.path.append('/home/myusername')
DJANGO_SETTINGS_MODULE = 'myproject.myproject.settings'
# settings.py
INSTALLED_APPS = 'myproject.my_cool_app'
不过最好不要这样做,这样太复杂了。
顺便说一下,文档中有一个关于 sys.path 和导入问题的详细指南,适用于 PythonAnywhere。