rubyonrails ROR
这种架构了已经听了非常久了,但是一次都没有试过,这次看中上面一个issue track类的系统redmine,想试试,所以就有了这一次历程,由于各种版本问题,安装还是比较需要经验的,呵呵。
第一步,去看看redmine的文档,发现对ruby和相关组件的版本要求相当多。。。具体如下:
http://www.redmine.org/projects/redmine/wiki/RedmineInstall
The required Ruby and Ruby on Rails versions for a given Redmine version is:
Redmine version | Supported Ruby versions | Required Rails version | Required Rack version |
---|---|---|---|
current trunk | ruby 1.8.6, 1.8.7 | Rails 2.3.11 | Rack 1.1.1 |
trunk from r2887 to r4903 | ruby 1.8.6, 1.8.7 | Rails 2.3.5 | Rack 1.0.1 |
trunk from r2493 to r2886 | ruby 1.8.6, 1.8.7 | Rails 2.2.2 | |
trunk before r2493 | ruby 1.8.6, 1.8.7 | Rails 2.1.2 | |
1.2.x | ruby 1.8.6, 1.8.7 | Rails 2.3.11 | Rack 1.1.1 |
1.1.x | ruby 1.8.6, 1.8.7 | Rails 2.3.5 | Rack 1.0.1 |
1.0.x | ruby 1.8.6, 1.8.7 | Rails 2.3.5 | Rack 1.0.1 |
0.9.x | ruby 1.8.6, 1.8.7 | Rails 2.3.5 | Rack 1.0.1 |
0.8.x | ruby 1.8.6, 1.8.7 | Rails 2.1.2 |
根据redmine最新版1.2.x,确定对应的ruby和相关组件的版本
ruby 1.8.7 / rails 2.3.11 / rack 1.1.1
第二步,去找ruby了,当前最新版本是 ruby 1.9.2 ,好像没找到链接是下载旧版本的(这相当郁闷,后面还有这样的情况)
http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p290.tar.gz
下载地址反推一下,就找到ftp的下载路径,里面就有所有版本的源代码可以下载了
http://ftp.ruby-lang.org/pub/ruby/
找到1.8.7的最新版,找p数字最大的,p for patch
http://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p352.tar.gz
下载,解压,configure ,make,make install
编译ruby之前记得看看自己的openssl-dev 在不在,如果不在的话要装好,要不就没有编译ssl部分的功能了,这样会影响后面的安装。
如果你不安装在标准目录下面,记得自己添加PATH
安装完成后看看版本号?
>ruby -v ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-linux]
第三步,安装其他组件,在找文档的过程中,发现ruby的组件有个比较方便的管理器,类似rpm形式的rubygems
找到它的网站
最新版本1.8.7,这里又是一个大大的陷阱,如果前面看安装文档不注意的话,就按装了gems的最新版了,发现是和rails不兼容的,真是瀑布汗。。。
具体如下:
RubyGems 1.3.7 or higher is required with following limitations :
- Rails 2.3.5 will fail with RubyGems 1.5.0 or later, stick to previous versions of RubyGems !
- Rails 2.3.11 will fail with RubyGems 1.7.0 or later, stick to previous versions of RubyGems !
意思就是2.3.11的rails只支持rubygems 1.7.0 以下的,又是一轮寻找旧版的历程,首页也没有直接指进去的
要去到一个叫rubyforge的地方,类似sourceforge吧,找到rubygems项目,找各版本的源代码,如下
http://rubyforge.org/frs/?group_id=126
在其中找到1.6的最新版,1.6.2
http://rubyforge.org/frs/download.php/74445/rubygems-1.6.2.tgz
下载,解压,执行
>ruby setup.rb
会自动判断ruby版本,安装到对应的路径下面
第四步,安装了rubygems以后,就可以用gems命令来管理ruby的组件了
按要求安装rails版本
>gem install rails -v=2.3.11
这个时候会自动帮你安装好所需要的包,和rpm类似了
装好以后会有以下的包
> gem list --local actionmailer (2.3.11) actionpack (2.3.11) activerecord (2.3.11) activeresource (2.3.11) activesupport (2.3.11) rack (1.1.2) rails (2.3.11) rake (0.9.2)
自动就装好了rack 和 rake,只是希望 rack 1.1.2 不要 太高了,和要求的1.1.1不要有冲突就好,唉。。。
装到这里,还缺少mysql 和 fcgi 的 ruby组件,还有一个叫i18n的组件,这些都是后面出错里面提醒了,都写在这一步安装即可
>gem install i18n -v=0.4.2 >gem install fcgi >gem install mysql
报错的话自己装好 fastcgi 的dev包和mysql的dev包,其中mysql的随便用yum或者apt-get搞定即可,但是fastcgi的开发包在centos下面貌似没有,yum找不到,apt-get 是有的,那就自己编译咯
最新的fastccgi包,http://www.fastcgi.com/dist/fcgi.tar.gz
下载编译安装,一样的流程,如果不是安装在标准路径的话,gem安装的时候要指定如下:
>gem install fcgi -- --with-fcgi-dir=/home/fastcgi
全部成功之后,看看ruby组件有哪些:
>gem list --local *** LOCAL GEMS *** actionmailer (2.3.11) actionpack (2.3.11) activerecord (2.3.11) activeresource (2.3.11) activesupport (2.3.11) fcgi (0.8.8) i18n (0.4.2) mysql (2.8.1) rack (1.1.2) rails (2.3.11) rake (0.9.2)
第五步,就是安装redmine了
下载最新版
http://rubyforge.org/frs/download.php/75097/redmine-1.2.1.tar.gz
解压之后就是一个完整的项目结构了。
ok,先访问自己的数据库,建立一个database供其使用
按照安装文件一步步来,先进入你解压出来的目录
>cp config/database.yml.example config/database.yml
编辑 database.yml 中的production配置,设置好你的mysql主机/用户密码和database
production:
adapter: mysql
database: redmine
host: localhost
username: redmine
password: my_password
执行
>rake generate_session_store
创建session目录,会有一些warning,别管它。
>RAILS_ENV=production rake db:migrate
创建数据库,RAILS_ENV的环境变量就指定了要用哪一份配置文件
>RAILS_ENV=production rake redmine:load_default_data
插入初始数据
>ruby script/server webrick -e production
开启webrick服务器,默认端口3000,这样就可以通过http://your_ip:3000/访问你的redmine了
初始的用户名密码是 admin/admin
到这里,测试的话已经够用了,那如果要整合apache呢,看看 pubic/htaccess.fcgi.example
这里就有apache的基本配置了,全部是基于rewrite的,看看你是要cgi还是fcgi实现,就对应
dispatch.fcgi.example
dispatch.cgi.example
两个脚本,这些都是生成好了放在pubic的了,按需要就改名即可,这里解释一下htaccess里面的设置
#判断加载的模块,看看要什么样的处理流程。 <IfModule mod_fastcgi.c> AddHandler fastcgi-script .fcgi </IfModule> <IfModule mod_fcgid.c> AddHandler fcgid-script .fcgi </IfModule> <IfModule mod_cgi.c> AddHandler cgi-script .cgi </IfModule> #目录加上跟随链接和可执行cgi Options +FollowSymLinks +ExecCGI #打开rewrite RewriteEngine On #直接访问根的,跳转到index.html,访问其他没有扩展名的,如xxx,也跳转到对应的xxx.html #如果请求的文件不存在,就跳转到对应的cgi/fcgi处理,存在的话,就直接访问静态文件。 RewriteRule ^$ index.html [QSA] RewriteRule ^([^.]+)$ $1.html [QSA] RewriteCond %{REQUEST_FILENAME} !-f <IfModule mod_fastcgi.c> RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] </IfModule> <IfModule mod_fcgid.c> RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] </IfModule> <IfModule mod_cgi.c> RewriteRule ^(.*)$ dispatch.cgi [QSA,L] </IfModule> # 500 服务器错误时候的显示文本。 ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"
如果有apache配置经验的人看到这里基本就都懂得如何配置了,其实原理就是把所有动态的请求都转发到cig/fcgi处理,QSA的意思就是带上所有参数,非常简单明了。
整个安装过程有点长,关键在于各个版本号的兼容性处理上面,很让人头疼,如果没有linux编译经验的人,要完成这个功能的话可能会比较抓狂,呵呵。