繁体   English   中英

如何处理heroku重命名我的根级应用程序?

[英]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.modelsbar.views可以

from .models import *

这是一个问题,原因是Django 1.4更改了新创建项目的文件夹结构。 在1.4之前,您将具有与您描述的类似的结构,减去foo/__init__.py Heroku改编了Django 1.4的项目结构,这可以说是更好的,因为它封装了项目中的设置并使其更易于移植。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM