[英]How to deal with heroku renaming my root-level app?
Heroku似乎更喜欢部署的应用程序具有一定的结构,主要是.git和manage.py在根目录下,其他所有内容都在此之下。
我继承了一个我正尝试部署用于测试目的的Django应用程序,但我认为我无法对其进行重组,因此我想知道是否还有其他选择。
我继承的结构在根文件夹中包含大多数文件:
./foo:
__init__.py,
.git,
Procfile,
settings.py,
manage.py,
bar/
models.py, etc
在foo内部,我可以运行python manage.py shell
,在from foo.bar import models
可以运行from foo.bar import models
。
但是,当我将其推送到Heroku时,它将根放在/app
,因此foo
成为app
并且from foo.bar import models
不再起作用。
是否有任何魔术设置可以让我指示该app
确实是foo
并允许我继续执行而无需重构应用程序结构和/或所有导入?
类似的问题 :我认为我的问题类似于Heroku-Django:必须myproject
所有提及都更改为app
以使我的网站正常运行。 将来如何最好地避免这种情况? ,只是我要问是否可以在不更改网站结构的情况下做任何事情。
您可以尝试在manage.py中添加一行修改sys.path的行,以确保foo
在您的路径中:
import sys
PROJECT_DIR = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
if PROJECT_DIR not in sys.path:
sys.path.insert(0, PROJECT_DIR)
尽管作为旁注,让顶层目录成为python模块并不是很好的django风格,但这恰恰是因为它使部署更加复杂(我不认为上面的内容可以在heroku上使用)。 我可能建议仅更改您的代码以直接从bar
导入,并删除foo/__init__.py
。
最简单的方法是删除foo/__init__.py
并将您的import语句修改为从bar
而不是从foo
导入,例如
from foo.bar.models import *
变
from bar.models import *
或者,您可以使用相对导入 。 因此,如果您想在bar.models
中导入bar.models
, bar.views
可以
from .models import *
这是一个问题,原因是Django 1.4更改了新创建项目的文件夹结构。 在1.4之前,您将具有与您描述的类似的结构,减去foo/__init__.py
。 Heroku改编了Django 1.4的项目结构,这可以说是更好的,因为它封装了项目中的设置并使其更易于移植。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.