2016-07-05 104 views
0

我在服务器上安装了NGINX UWSGI和WEB2PY。 Web2py应用程序通过访问数据库并在表中打印行来执行一项功能。通过web服务器在web2py框架中调用python脚本

def fetch(): 

    import psycopg2 

    conn = psycopg2.connect(database="postgres", 
        user="postgres", 
        password="qwerty", 
        host="127.0.0.1") 
    cur = conn.cursor() 
    cur.execute("SELECT id, name from TEST") 
    rows = cur.fetchall() 
    conn.close() 
    return rows 

当函数在本地调用时返回表格内容。 但是,当我试图调用远程机器我得到一个内部错误500

一个更有趣的事情的功能,就是当函数如下所示:

def hello(): 
    return 'hello' 

字符串“你好”返回。开始添加一个导入指令会立即导致生成错误页面。

任何人都可以建议正确的应用语法/逻辑吗?

回答

0

我的猜测是你的MySQL服务不允许远程访问。你可以检查你的MySQL配置吗?

vim /etc/mysql/my.cnf 

注释掉以下几行。

#bind-address   = 127.0.0.1 
#skip-networking 

如果配置文件中没有skip-networking行,只需添加它并注释掉即可。

然后重新启动mysql服务。

service mysql restart 
+0

我使用PostgreSQL。应用程序通过uwsgi访问。据我了解web2py框架逻辑,我通过访问http:// server/app_dir/src_file/func调用应用程序。如果我只是想返回'hello',它适用于我。我能够使用远程机器上的httplib库中的getresponse()方法获取字符串。 我想我正在寻找一种方法来返回整数或数组? – user176289

+0

它只是一个被称为远程访问数据库的函数。不是吗? – user176289

0

原谅愚蠢的问题,但你有检查,如果该模块是可用的在您的服务器上?

当您尝试导入时说错误出现在您的hello函数中时,它与import psycopg2指令相同?

试试这个: 假设取()这是对controllers/default.py 打开文件夹views/default定义并创建一个名为fetch.html 粘贴此新文件中

{{extend 'layout.html'}} 
{{=rows}} 

fetch.html是一个视图,或者如果你的模板喜欢

修改fetch()方法返回与行的字典视图打印

return dict(rows=rows) 

这是很基本的艰难,你可以找到关于这本书的基本步骤的详细信息 - >http://www.web2py.com/books/default/chapter/29/03/overview#Postbacks

+0

是的。但是,如果我试图自己访问服务器上的数据库,但不能通过网络,那就没关系。 我想我不明白web2py应用程序逻辑,这就是为什么不能正确地返回数据。与调用约定的东西。 – user176289

+0

Web2py逻辑很简单,调用localhost的函数返回一个通用视图,如果你在一个'真正'的服务器上,你必须提供你自己的视图。 不确定缺少的视图是否可能返回错误500.是否有机会查看这些行? – dido