有趣的是,OpenShift 某些cartridge 的配置文件是可以自定义的,如php.ini 、my.cnf,但是自定义的配置在应用重启后就会丢失,这样也是为了保证应用的稳定吧。但针对个人开发需要,需要变更某些参数时就麻烦了。 这一次遇到的问题是与系统时间有关的,OpenShift 默认时区是GMT,不使用我们大陆用户使用的东8 时区,所以需要修改TIMEZONE 来迎合个人使用需要。我的一个应用(appname)使用的Cartridge 有PHP5、Mysql-5.5、phpMyadmin。这次要定义Apache、PHP及Mysql 的TIMEZONE值。 Apache / PHP: 1) 在php 应用更目录(Documentroot)添加.htaccess 文件,有的话就直接在原基础上修改就可以了。加入定义内容:

SetEnv TZ Asia/Shanghai
php_value date.timezone Asia/Shanghai

2) 重启应用:

ctl_all restart

3) 查看phpinfo :

Apache Environment 段相关值如下

TZ

Asia/Shanghai

date 段

date/time support

enabled

“Olson” Timezone Database Version

0.system

Timezone Database

internal

Default timezone

Asia/Shanghai

Directive

Local Value

Master Value

date.default_latitude

31.7667

31.7667

date.default_longitude

35.2333

35.2333

date.sunrise_zenith

90.583333

90.583333

date.sunset_zenith

90.583333

90.583333

date.timezone

Asia/Shanghai

GMT

定义Mysql 的TIMEZONE: OpenShift 的mysql 配置文件位于~/mysql-5.1/conf/my.cnf,直接修改这个文件后,修改过的内容同样会在mysql cartridge 重启后丢失。 既然无法通过修改my.cnf 文件添加default-time-zone=timezone(default-time-zone=’+08:00’)来定义时区,那只能另外想办法了。 幸好,OpenShift 考虑得非常周到,可以通过rhc 客户端工具自定义环境变量来设置Mysql 时区!这个环境变量是:

OPENSHIFT_MYSQL_TIMEZONE

那么通过rhc 来定义变量OPENSHIFT_MYSQL_TIMEZONE 的值: 1)

rhc set-env -a a OPENSHIFT_MYSQL_TIMEZONE=’+08:00’ -a appname

2) 重启mysql cartridge 及app

rhc cartridge mysql-5.5 -a date
rhc app start appname

3) 检查变量值

rhc ssh appname –gear ‘env | grep TIMEZONE | grep -v grep’

输出:

OPENSHIFT_MYSQL_TIMEZONE=+08:00

也可以通过查看phpinfo.php 页面检查变量值:

OPENSHIFT_MYSQL_TIMEZONE

+08:00


题外话,如果你的程序遇到500 等其他错误需要查看php 错误信息来调试应用,可以通过一下方法临时变更php 的display_erros 及error_reporting 的值:

Comments