Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Heroku上连接MySQL?_Python_Mysql_Django_Heroku - Fatal编程技术网

Python 如何在Heroku上连接MySQL?

Python 如何在Heroku上连接MySQL?,python,mysql,django,heroku,Python,Mysql,Django,Heroku,我有一个Django项目,它使用MySQL作为数据库。在我的开发机器上,MySQL数据库在我的本地机器上运行,如下所示: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'xxx', 'USER': 'root', 'PASSWORD': 'xxxx', 'HOST': 'localhost',

我有一个Django项目,它使用MySQL作为数据库。在我的开发机器上,MySQL数据库在我的本地机器上运行,如下所示:

DATABASES = {

    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'xxx',
        'USER': 'root',
        'PASSWORD': 'xxxx',
        'HOST': 'localhost',
        #'PORT': '3306',
    }
}
我已经成功地将该项目部署到Heroku,但它一直在显示这一点

2003,“无法连接到'localhost'上的MySQL服务器([Errno 111]连接被拒绝)

由于设置是本地MySQL,并且
views.py
包含导入本地数据库的功能。我仍然不知道如何让网站连接到此数据库


有没有办法让Heroku可以这样做,或者我需要找到另一台主机?

您可以将settings.py升级到一个包中。创建类似于此的设置文件夹

settings/
├── __init__.py
├── base.py
├── dev.py
├── heroku.py
保留base.py作为settings.py,然后根据环境更改所需内容

你的heroku.py可能是

from .base import *

DATABASE = {
    # change to use the database on heroku
}
重要的是告诉部署版本使用新设置

import os

from django.core.wsgi import get_wsgi_application

# point to the new settings.dev as default, if the `DJANGO_SETTINGS_MODULE`
# is not set
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.dev")
application = get_wsgi_application()

记住将heroku中的
DJANGO\u SETTINGS\u模块更改为
SETTINGS。heroku

您可以将SETTINGS.py升级为一个包。创建如下设置文件夹

settings/
├── __init__.py
├── base.py
├── dev.py
├── heroku.py
保留base.py作为settings.py,然后根据环境更改所需内容

你的heroku.py可能是

from .base import *

DATABASE = {
    # change to use the database on heroku
}
重要的是告诉部署版本使用新设置

import os

from django.core.wsgi import get_wsgi_application

# point to the new settings.dev as default, if the `DJANGO_SETTINGS_MODULE`
# is not set
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.dev")
application = get_wsgi_application()

请记住将heroku中的
DJANGO\u设置\u模块更改为
SETTINGS。heroku

一个非常有用的方法是使用并设置heroku设置上的配置选项

# settings.py
# Parse database connection url strings like psql://user:pass@127.0.0.1:8458/db
DATABASES = {
    # read os.environ['DATABASE_URL'] and raises ImproperlyConfigured exception if not found
    'default': env.db(),

}
以及您的环境变量,如:

DATABASE_URL=mysql://user:%23password@127.0.0.1:3306/dbname

关于您的问题,Heroku是部署项目的一个非常好的选项。

一个非常有用的方法是在Heroku设置上使用并设置配置选项

# settings.py
# Parse database connection url strings like psql://user:pass@127.0.0.1:8458/db
DATABASES = {
    # read os.environ['DATABASE_URL'] and raises ImproperlyConfigured exception if not found
    'default': env.db(),

}
以及您的环境变量,如:

DATABASE_URL=mysql://user:%23password@127.0.0.1:3306/dbname
关于您的问题,Heroku是部署项目的一个非常好的选择。

是一个良好的开端,可以推广到任意环境变量。但是如果您只关心数据库变量,还有另一个解决方案

默认情况下,Heroku提供PostgreSQL数据库,并使用可用于连接到该数据库的连接字符串设置应用程序的
数据库\u URL

据我所知,各种MySQL插件也设置了这个变量,但是知道您选择了哪一个变量会很有帮助,这样我们可以确认。它可能需要根据另一个环境变量手动设置

假设正确设置了
DATABASE\u URL
环境变量,您可以在
settings.py
文件中直接设置数据库,也可以在变量不可用时(例如在开发框中)提供备用选项:

import dj_database_url

DATABASES['default'] = dj_database_url.config(
    default='mysql://root:<password>@localhost:3306/<database>',
)
导入dj\u数据库\u url
数据库['default']=dj_database_url.config(
默认值mysql://root:@localhost:3306/“,
)
是一个很好的开始,可以推广到任意环境变量。但是如果您只关心数据库变量,还有另一种解决方案

默认情况下,Heroku提供PostgreSQL数据库,并使用可用于连接到该数据库的连接字符串设置应用程序的
数据库\u URL

据我所知,各种MySQL插件也设置了这个变量,但是知道您选择了哪一个变量会很有帮助,这样我们可以确认。它可能需要根据另一个环境变量手动设置

假设正确设置了
DATABASE\u URL
环境变量,您可以在
settings.py
文件中直接设置数据库,也可以在变量不可用时(例如在开发框中)提供备用选项:

import dj_database_url

DATABASES['default'] = dj_database_url.config(
    default='mysql://root:<password>@localhost:3306/<database>',
)
导入dj\u数据库\u url
数据库['default']=dj_database_url.config(
默认值mysql://root:@localhost:3306/“,
)

感谢您的回复。具体来说,带有本地mysql的django模块将自动保存来自web的输入信息,如用户、日期时间等。但当我在线部署时,我可以从何处检索这些信息?我可以在view.py functions.Thx中的下一个处理步骤中使用这些信息!您能给出一个示例吗您是如何保存输入信息的?谢谢您的回复。具体来说,带有本地mysql的django模块将自动保存来自web的输入信息,例如用户、日期时间等。但是当我将其部署到联机时,我可以在何处检索这些信息?我可以在view.py函数的下一个处理步骤中使用这些信息。Thx!你能举例说明如何保存输入信息吗?“对于我的案例,哪台服务器是在线部署的最佳选择?”这与堆栈溢出无关。它主要基于观点,要求我们查找或推荐一个非现场资源。但是,“我如何在Heroku上实现这一点?”“这是主题。请回顾中的主题,并尝试相应地阐述您的问题。“对于我的案例,哪台服务器是在线部署的最佳选择?”这是堆栈溢出的主题。它主要基于意见,要求我们查找或推荐一个非现场资源。然而,“我如何在Heroku上完成这项工作”是一个热门话题。请回顾中的主题,并尝试相应地提出您的问题。谢谢您的回复。在更改设置后,部署的web仍然显示:2003,“无法连接到“localhost”上的MySQL服务器([Errno 111]连接被拒绝)”请运行
heroku config
(或查看仪表板中的应用程序设置)。您是否看到一个变量,其值类似于以
mysql://
开头的URL?请不要与我们共享该值,但该变量的名称是什么?它是这样的:DATABASE_URL:mysql2://root:xxx@localhostThat这行不通。您正在使用哪个MySQL插件?谢谢您的回复。在更改设置后,部署的web仍然显示:2003,“无法连接到'localhost'上的MySQL服务器”