【问题标题】:Can I run Django application in both local server and Ubuntu server?我可以在本地服务器和 Ubuntu 服务器上运行 Django 应用程序吗?
【发布时间】:2020-10-22 14:23:09
【问题描述】:

所以我已经使用 AWS EC2 部署了我的 Django 项目,它使用 Ubuntu 服务器。另外,我使用 Posgtres 作为数据库引擎。然后我对代码做了一些小改动,并想检查它是否正确制作但在我的本地计算机上,所以目前只有我可以检查。然而,当我使用python manage.py runserver 命令时,它给了我一个错误提示"Is the server running on host "##MyDBInstanceID##.ap-northeast-2.rds.amazonaws.com" and accepting TCP/IP connections on port 5432?"
这是我第一次部署项目,我不知道出了什么问题。当我尝试使用本地计算机访问时,是否必须关闭 Ubuntu 服务器?如果是这种情况,是否每次我进行小的更改并想自己检查时都必须这样做?
谢谢。

【问题讨论】:

    标签: python django postgresql amazon-web-services amazon-ec2


    【解决方案1】:

    听起来您正在尝试让本地 Django 测试服务器连接到您的 AWS EC2 数据库。你可以做的是在本地安装和运行 Postgres,然后将你的本地 Django 服务器指向它。以下是有关Database 设置的Host 选项的文档:Django Database Settings

    如果您将Host 字段设置为空字符串,那么您的 AWS EC2 Django 服务器将使用其(本地)AWS EC2 Postgres 服务器,而您自己的本地计算机 Django 服务器也将使用您设置的本地 Postgres。

    您当前的settings.py 可能是这样的:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': '##Your database name ##',
            'USER': '## Your database user ##',
            'PASSWORD': '## Your database user password ##',
            'HOST': '##MyDBInstanceID##.ap-northeast-2.rds.amazonaws.com',
            'PORT': '', # Defaults to 5432
        }
    }
    

    如果你只是设置:

    'HOST': '' # Will connect to a localhost database
    

    然后,运行在##MyDBInstanceID##.ap-northeast-2.rds.amazonaws.com 的 Django 服务器将连接到在端口 5432 上运行在同一位置 (localhost) 的 Postgres 数据库。同样,您自己的计算机将连接到您自己计算机上的 localhost Postgres 数据库。如果数据库与 Django 服务器位于不同的计算机上,则只需设置 HOST。对于您描述的那种测试,本地数据库就足够了。

    或者,如果您使用 Git,您可以将 PG_HOST 字段添加到与 settings.py 位于同一文件夹中的名为 local_settings.py 的文件中,然后将每个位置的相应主机添加到 PG_HOST,然后添加local_settings.py 到您的 .gitignore 文件。然后只需在您的settings.py 中导入PG_HOST 并将Host 字段设置为等于PG_HOST。这样,您可以在本地和服务器实例上独立设置数据库主机。例如:

    在 AWS EC2 实例上创建包含内容的 local_settings.py:

    PG_HOST = '##MyDBInstanceID##.ap-northeast-2.rds.amazonaws.com'
    

    在本地计算机上创建包含内容的 local_settings.py:

    PG_HOST = '' # Local host
    

    settings.py:

    from .local_settings import PG_HOST
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': '##Your database name ##',
            'USER': '## Your database user ##',
            'PASSWORD': '## Your database user password ##',
            'HOST': PG_HOST,
            'PORT': '', # Defaults to 5432
        }
    }
    

    请记住.gitignorelocal_settings.py,否则特定位置的设置将被覆盖。

    您也可以使用local_settings.py 文件将您的 postgres 用户名和密码从您的 Git 历史记录中删除(同样,如果您使用 git 或某些源代码控制)。

    【讨论】:

    • 嘿,非常感谢您的回答。但是我对第二段有点困惑。你能详细说明一下吗?谢谢:)
    • @RyanOh 我已经更新了答案以提供更多信息。这样就清楚了吗?
    • 非常感谢您的回答。但是当我python manage.py runserver 时,我收到此错误消息No module named 'local_settings'。我已经在 settings.py 中准确地输入了您在上面写的内容。 (下半部分,因为我使用的是 Git)。你认为是什么问题?再次感谢。 :)
    • 如你所说,我只在本地计算机的 local_settings.py 中写了PG_HOST = ''
    • @RyanOh 您需要在与settings.py 相同的文件夹中创建一个名为local_settings.py 的文件。在您的项目根目录中,添加一个名为.gitignore 的文件,其内容为/<your project name>/local_settings.py。然后也在您的 AWS EC2 实例上创建该文件。还可以尝试将导入语句更改为 from .local_settings import PG_HOST(注意“.”)以显示相对导入。我之前省略了。
    猜你喜欢
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多