我正在OpenShift上设置一个应用程序。它需要Python脚本每小时运行一次,并将数据从在线服务器提取到OpenShift上的MySQL数据库中。通过在我的计算机上本地运行Python脚本并使用端口转发技术,我已经填充了这个数据库一段时间了。这就像一个魅力。下面是执行此操作时显示的端口转发信息。
Service Local OpenShift
------- -------------- ---- -------------------
httpd 127.0.0.1:8080 => 127.12.248.131:8080
mysql 127.0.0.1:3306 => 127.12.248.130:3306
node 127.0.0.1:8081 => 127.12.248.129:8080
Press CTRL-C to terminate port forwarding
我在本地脚本中使用的变量......
host='127.0.0.1'
user='user_placeholder'
passwd='password_placeholder'
db='3v3'
port=3306
当然我希望脚本在OpenShift的服务器上自动运行,所以我不必自己动手。经过快速搜索,我偶然发现了cron方法。可以将python脚本放在地图中以使其每小时运行一次。我设置了一些环境变量来访问我的数据库,就像我在本地脚本中所做的那样。但是,当我尾随它时,脚本似乎无法连接到MySQL数据库。我甚至打印出环境变量,它们与我以前成功移植过的那些完全相同。
host=os.environ['OPENSHIFT_EXTMYSQL_DB_HOST'] # prints '127.12.248.130'
user=os.environ['OPENSHIFT_EXTMYSQL_DB_USERNAME'] # prints 'user_placeholder'
passwd=os.environ['OPENSHIFT_EXTMYSQL_DB_PASSWORD'] # prints 'password_placeholder'
db=os.environ['OPENSHIFT_EXTMYSQL_DB_NAME'] # prints '3v3'
port=int(os.environ['OPENSHIFT_EXTMYSQL_DB_PORT']) # prints 3306
错误消息:
File "/var/lib/openshift/57c57f1889f5cfd9bb00006b/app-root/runtime/repo/.openshift/cron/minutely/test.py", line 36, in <module>
db = MySQLdb.connect(host=os.environ['OPENSHIFT_EXTMYSQL_DB_HOST'], user=os.environ['OPENSHIFT_EXTMYSQL_DB_USERNAME'], passwd=os.environ['OPENSHIFT_EXTMYSQL_DB_PASSWORD'], db=os.environ['OPENSHIFT_EXTMYSQL_DB_NAME'], port=int(os.environ['OPENSHIFT_EXTMYSQL_DB_PORT']))
File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/MySQLdb/__init__.py", line 81, in Connect
return Connection(*args, **kwargs)
File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/MySQLdb/connections.py", line 187, in __init__
super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (2003, "Can't connect to MySQL server on '127.12.248.130' (113)")
老实说,我不知道这可能会出错。我知道这不是一个主角,但如果有人想知道问题是什么,我会很高兴听到。