Ubuntu最近更新到8.10了,服务器还在跑7.10, 趁项目刚告一段落,来翻新下系统和rails部署环境。
升级之路并不是很顺利,期间遇到很多阻挠浪费时间的问题,不过最后都解决了,服务器定型为:
- Ubuntu8.10 server
- Apache 2.2.9
- SVN 1.5.1
- PHP 5.2.6
- Python 2.5.2
- mod_python 3.3.1
- Phusion_Passenger 2.0.3
- ruby 1.8.6 p287
- rails 2.1.2
- rubygems 1.3.1
- mysql 5.0.67
记录下升级大自过程,碰到的问题和解决方法。
11月11日下午开始升级,ubuntu 8.10 intrepid源是用lupa的,机房在杭州的, 但速度不怎么样,刚开始有400KB,后来就要40~50KB的速度了,好在中间没有发生中断丢包的事情。
服务器升级顺利完成,重新启动,ssh能登入,开心!可以zikii停了,其他php+apache的站依然跑起来了,果然mod更省心阿,也是为什么通过这次升级,把mongrel换成mod_rails(passenger)。
检查下基本情况,发现ruby在ubuntu8.10下被更新到1.8.7 p72了,前几天刚给新装的leopard也配上ruby1.8.7了,可费了很大的劲的。
ruby没有问题,接下去检查rubygems,发现找不着了,于是手动编译安装了rubygems1.3.1,重启后zikii也跑起来了,/etc/init.d/下面的mongrel_cluster脚本能把网站启动起来,开心~ 这么简单搞定拉。 然后开始看passenger(即mod_rails)文档,一边安装起来,gem 安装方式最简单了,gem install passenger,但是恶梦开始了……
用gem来安装, 不管是安装passenger还是别的如RedCloth都报如下错误:
sudo gem install RedCloth
Building native extensions. This could take a while…
ERROR: Error installing RedCloth:
ERROR: Failed to build gem native extension.
/usr/bin/ruby1.8 extconf.rb install RedCloth
creating Makefile
make
cc -I. -I/usr/lib/ruby/1.8/x86_64-linux -I/usr/lib/ruby/1.8/x86_64-linux -I. -fPIC -fno-strict-aliasing -g -g -O2 -fPIC -O2 -c redcloth_scan.c
cc -I. -I/usr/lib/ruby/1.8/x86_64-linux -I/usr/lib/ruby/1.8/x86_64-linux -I. -fPIC -fno-strict-aliasing -g -g -O2 -fPIC -O2 -c redcloth_inline.c
cc -I. -I/usr/lib/ruby/1.8/x86_64-linux -I/usr/lib/ruby/1.8/x86_64-linux -I. -fPIC -fno-strict-aliasing -g -g -O2 -fPIC -O2 -c redcloth_attributes.c
cc -shared -o redcloth_scan.so redcloth_scan.o redcloth_inline.o redcloth_attributes.o -L. -L/usr/lib -L. -Wl,-Bsymbolic-functions -rdynamic -Wl,-export-dynamic -lruby1.8 -lpthread -ldl -lcrypt -lm -lc
/usr/bin/ld: cannot find -lruby1.8
collect2: ld returned 1 exit status
make: *** [redcloth_scan.so] Error 1
Gem files will remain installed in /usr/lib/ruby/gems/1.8/gems/RedCloth-4.1.0 for inspection.
Results logged to /usr/lib/ruby/gems/1.8/gems/RedCloth-4.1.0/ext/redcloth_scan/gem_make.out
后来倒偶然发现, gem install rails 安装rails可以完成.
开始对错误googling, 这块错误比较少见, 找不着明确的解决, 看提示应该是编译器找不着ruby, 这样推断应该是ruby安装的问题,比如没有启用 –enable-share. 尝试了几次方法挽救, 无望下就决定先把ruby1.8.6装回来先.
1.8.6的安装相对比较顺利, 因为一些dependencies都已经有了,直接在/usr/local/src/ruby-1.8.6-p287/里执行:
./configure –prefix=/usr/local/ruby-1.8.6 (单独安装一个目录里面, 为以后安装多版本ruby作准备)
make && sudo make install
成功:
/usr/local/ruby-1.8.6/bin/ruby -v
ruby 1.8.6 (2008-08-11 patchlevel 287) [x86_64-linux]
安装好之后同步可执行文件:
sudo ln -s /usr/local/ruby-1.8.6/bin/* /usr/local/bin
rubygems也需要重新安装一下,因为之前是ruby1.8.7相关环境.
/usr/local/ruby-1.8.6/bin/ruby setup.rb
成功后:
gem env
RubyGems Environment:
- RUBYGEMS VERSION: 1.3.1
- RUBY VERSION: 1.8.6 (2008-08-11 patchlevel 287) [x86_64-linux]
- INSTALLATION DIRECTORY: /usr/local/ruby-1.8.6/lib/ruby/gems/1.8
- RUBY EXECUTABLE: /usr/local/ruby-1.8.6/bin/ruby
- EXECUTABLE DIRECTORY: /usr/local/ruby-1.8.6/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /usr/local/ruby-1.8.6/lib/ruby/gems/1.8
- /home/hebin/.gem/ruby/1.8
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- http://gems.rubyforge.org/
接下来安装gems, 现在都能顺利安装了, rails/RedCloth/passenger/mysql …
passenger gem安装完毕后, 执行sudo passenger-install-apache2-module, 又有问题出现了, 不过忘记了把错误代码贴下来, 我接着尝试直接编译安装, 编译成功了.
然后开始配置apache, 这部分就很简单了,把网站配置也同步更新了, reload apache, 满怀期望zikii被加载出来, 最后出来一个passenger的错误页面,里面有些错误提示和backtrace,我光盯backtrace,没有注意那小行错误提示:找不到文件, 然后拼命找解决办法,一遍又一遍的试, rubygems反复重装了几次, passenger也是, 甚至把原来的ruby1.8.7也卸载掉了, 还都是没解决. 休息了会儿,理了理思路, 新建了一个rails 项目来跑一跑, 竟然一切ok, 那说明一切都不是ruby/gems/passenger/apache等环境的问题了,
肯定是zikii app本身的问题, 然后又用./script/server 来跑webrick, 没有任何提示, 安装了mongrel来跑也一切正常, 突然我发现一个之前一直没注意的问题, ./script/server 不能直接被启动,而是用 ruby ./script/server 才行, 恍然大悟原来server 没有被赋执行的权限, 用sudo chmod +x 加上,再跑passenger 发现还是错误,不过错误提示有改变, 通过google在passenger的group里面找到问题线索, config/enviroment.rb 文件属性的关系,我重新从root chown到我的用户, 问题终于解决了, 我长吁一口气.
服务器顺利升级后,跑了跑zikii发现速度快了不少,下一步再上enterprise ruby。 现在apache+passenger的方式就和php一样了,rails app的部署也和php一样省心了,cool~
后面还有很多工作好做,比如capstrino自动部署,monit监测,还有把zikii从svn过渡到git上去,好,next…