我正在 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",
第 36 行,在
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'],
端口=int(os.environ['OPENSHIFT_EXTMYSQL_DB_PORT']))
File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/MySQLdb/__init__.py",
第 81 行,在连接中
返回连接(*args,**kwargs)
File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/MySQLdb/connections.py",
第 187 行,在init超级(连接,自我)。init(*args, **kwargs2)
_mysql_exceptions.OperationalError: (2003, "Can't connect to MySQL server on '127.12.248.130' (113)")
老实说,我不知道哪里会出错。我知道这不是太大的领先优势,但如果有人想知道问题可能是什么,我会很高兴听到。