学习Rails的第一件事情,自然是要装一个Rails的环境。这个倒不是太难,折腾几天之后就找到了InstantRails这个好东西。一切似乎都很美好,ruby跑起来了,rails也跑起来了,mysql、apache也都跑起来了,连php都跑起来了。总之,很美好,虽然我从来没用过ruby、rails、mysql、apache和php。
不过快乐的时光总是短暂的——这句话不是我说的,我只是引用而已——公司要我在server上装个东西,这个东西,它要用PHP5。不幸的是,InstantRails(我现在安装的是现在最新的InstantRails2.0)集成的PHP只是4,我需要把PHP4升级到PHP5。
这也不是什么难事。俗话说,内事不决问老婆,外事不决问Google(我是内事外事都问google),知之为知之,不知Google之——很快就找到了答案。于是跟着一步一步来:
首先,下载一个PHP5。这个太简单,我就不说了。我下载的是PHP5.2.5,For Windows。
安装PHP5。安装目录我选择了C:/PHP5,而不是/Program Fils/目录。然后选择apache的版本,InstantRails2.0里边的apache是1.3.33,因此我们选择apache 1.3.x module。接下来安装程序会要求你提供APACHE的conf文件目录。这儿会有个小问题,InstantRails有两个和Apache相关的httpd.conf文件,一个在Apache目录下,一个在conf_files目录下。犹豫之后我选择了conf_files目录,因为conf_files下的httpd.conf文件被修改的时候,InstantRails会自动修改apache/conf下边的httpd.conf文件。
继续安装。安装过程中InstantRails会很智能地告诉你出错了:"Invalid Command 'PHPIniDir'",先别理它,完成了PHP5的安装后再点InstantRails出错提示,点yes编辑httpd.conf文件(如果你已经点过No了,没关系,手工打开conf_files目录下的httpd.conf文件也行)。找到文件最后几行,会看到PHP5安装时添加的几句:
#BEGIN PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL
PHPIniDir "C:/PHP5/"
LoadModule php5_module "C:/PHP5/php5apache.dll"
#END PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL
把PHPIniDir "C:/PHP5/"和LoadModule php5_module "C:/PHP5/php5apache.dll"这两句注释掉。向前寻找LoadModule,可以看到原来InstantRails原来有一句LoadModule php4_module "${path}/php/php4apache.dll"被注释掉了。把LoadModule php5_module "C:/PHP5/php5apache.dll"这一句拷贝到这儿。继续向下寻找"PHP4",可以看到一句AddModule mod_php4.c。把这改成AddModule mod_php5.c。重新启动Apache,OK,不会报错了。
但是问题并没有全部结束。试着点InstantRails菜单-〉configure->Database (via PhpMyAdmin)。正常情况下应该打开一个浏览器窗口,并顺利连接到mysql数据库进行管理。在我们升级PHP之前确实是这样的,但现在不是了,你应该看到一行中文提示(如果你看到的是乱码,就在浏览器里选择一下编码方式):
无法载入 mysql 扩展,<br />请检查 PHP 配置 - 文档
问题产生的原因看起来是很简单的。InstantRails自带的PHP4内建了对mysql的支持,因此不需要加载mysql模块。但是我们安装的PHP5显然没有这么强大,因此我们需要自行加载mysql模块。打开conf_files目录下的PHP.ini文件,找到extension_dir这一行,将后边的值改为"C:/PHP5/EXT"。向后寻找“extension”,会发现一大堆extension=php_xxxxx.dll。在这里加上一句extension=php_mysql.dll,保存文件。InstantRails再次智能地告诉你出错了(这次是apache报错):无法定位程序输入点 mysql_server_end 与动态链接库 LIBMYSQL.DLL上。不幸的是,当你点击“确定”以后,同样的错误还会再弹出来一次;幸运的是,当我们关闭InstantRails然后再重新打开的时候,一切都再次变得美好了……