Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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 使用Postgresql数据库创建Azure Web应用程序(可能吗?)_Python_Django_Postgresql_Azure_Heroku - Fatal编程技术网

Python 使用Postgresql数据库创建Azure Web应用程序(可能吗?)

Python 使用Postgresql数据库创建Azure Web应用程序(可能吗?),python,django,postgresql,azure,heroku,Python,Django,Postgresql,Azure,Heroku,我使用Heroku托管一个带有postgres后端的Django web应用程序。我现在正在考虑将这个web应用迁移到Azure,利用Azure最近向我提供的大量服务 但我对一件事感到困惑:如何在Azure上创建一个Django网站,并使用postgresql作为数据库?我成功地创建了一个Django网站,并将其连接到git,但我似乎无法将其DB更改为postgresql 因此,当我执行git push azure master时,我得到一个错误:命令python setup.py egg\u

我使用Heroku托管一个带有postgres后端的Django web应用程序。我现在正在考虑将这个web应用迁移到Azure,利用Azure最近向我提供的大量服务

但我对一件事感到困惑:如何在Azure上创建一个Django网站,并使用postgresql作为数据库?我成功地创建了一个Django网站,并将其连接到git,但我似乎无法将其DB更改为postgresql

因此,当我执行git push azure master时,我得到一个错误:命令python setup.py egg\u info失败,错误代码为D:\home\site\wwwroot\env\build\psycopg2它在psycopg2(postgresql)上失败

其次,一旦我在Azure Web应用程序上成功安装了postgresql,我就需要调整它的postgresql.conf文件来调整设置(默认值太低)。我该怎么做



本文档仅讨论如何使用Linux为Azure VM安装PG,而不是Azure Web应用程序:

Azure Web应用程序仅提供Web应用程序,因为数据库由其他服务提供。通常,这是Azure SQL(提供SQL Server数据库作为服务)或ClearDB(提供MySQL)

因此,要启动Django应用程序并使用Postgres运行,您需要在某个地方部署Postgres DB。最初,您可以尝试使用settings.py指向Heroku Postgres DB,但是您可能会在DB端遇到一些防火墙设置


如果要按照链接()中的步骤操作,则可以将该实例用作Postgres DB,并调整settings.py文件以指向该计算机。您还可以更改postgresql.conf,因为您拥有这台计算机。

Azure Web Apps服务是一种PaaS,它提供多种服务来托管您的网站应用。我们在上面安装PostgreSQL的权限是有限的

目前,要在Azure上托管PostgreSQL,您可以利用@theadriangreen提到的linux虚拟机。您可以使用SSH命令
SSHuser@VMhost
在linux虚拟机上设置远程,并设置PG配置。有关Linux上PG的更多信息,请参阅

此外,您还可以在Azure附加市场中使用PostgreSQL映像创建docker容器

登录预览管理门户,点击搜索栏中的new=>search“postgres”,可以找到docker提供的postgres服务

您还可以通过SSH远程访问此VM以设置PG配置

如果您希望直接tcp连接到PG服务器,则需要在入站安全规则中添加5432端口

在上面创建的VM服务器的“所有设置”中,单击“网络接口”=>单击正在使用的接口=>单击正在使用的网络安全组名称,您可以在设置页面中找到入站安全规则

然后,您可以测试PG服务的连接:

import psycopg2

try:
    conn = psycopg2.connect(database="postgres", user="postgres", password="{password}", host="{host_ip}", port="5432")
    print "Opened database successfully"

    cur = conn.cursor()

    cur.execute("SELECT ARRAY[1.1,2.1,3.1]::int[] = ARRAY[1,2,3]");
    rows = cur.fetchall()
    print(rows)

    conn.commit()
    print "Records created successfully";
    conn.close()
except Exception, e:
    print "I am unable to connect to the database"

你知道,在深入研究Azure Web应用程序之前,我采取了一种非常不同的方法。我制作了一个Azure虚拟机(带Ubuntu),并将我的DB+应用程序代码(通过github)迁移到它。它还在那儿。但在我读了Troy Hunt关于不走VM路线的文章后,我把这种方法放在了次要位置:但现在看来,由于postgresql的原因,我无法在这里避免VM路线。请记住,您仍然可以在Azure应用程序服务上运行web应用程序。只是你需要在某个地方托管数据库,在Azure中实现这一点的唯一方法是提供你自己的VM,因为Azure不提供Postgres作为服务。{%load rant%}{%rant%}为什么你们不提供Postgres作为服务-{%endrant%}有两个后续的noob问题(提前道歉):(i)如何在Azure VM上找到我的数据库的
数据库\u url
(我必须在我的settings.py中引用的数据库)?(ii)如何为我的应用程序设置环境变量(my settings.py中的某些内容取决于此)?我猜是管理门户中的Web应用程序>应用程序名称>所有设置>应用程序设置>应用程序设置?我想你原来的问题已经得到了回答。你能接受并作为一个单独的问题问(i)吗?对于(ii)您的猜测是正确的,这是应用程序设置。您可以在scm站点上查看环境设置(https://.scm.azurewebsites.net/Env#envVariables).谢谢你的低调,加里。要通过ssh连接,我不需要publicdns吗?从上一篇Azure文章中,我一直在使用此命令连接到我创建的Azure虚拟机:
ssh@-p
。在这些虚拟机上,如果我尝试
sshusername@hostname-p 22
,我通常无法解析主机名。怎么办?如果您通过上一篇文章创建了一个虚拟机,您可以在上的虚拟机门户的仪表板页面中找到DNS名称,它应该类似于
{your_VM_NAME}.cloudapp.net
。并检查端点页面是否允许使用22端口。然后您可以直接利用
ssh@.cloudapp.net
连接您的虚拟机资源管理器虚拟机中没有端点选项卡,或者我忽略了它?我刚刚意识到我一直在看portal.azure.com,而您指的是manage.windowsazure.com。两个不同的仪表板,具有非常不同的UI,用于或多或少相同的事情。你是如何将django web应用程序与postgresql虚拟机连接起来的?或者你只是在虚拟机的wsgi上安装了django?是的,我的设置包括两个独立的虚拟机——一个托管DB,另一个托管web应用程序。我终于让它工作了=D,谢谢你的帮助!