免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3344 | 回复: 1
打印 上一主题 下一主题

在linux平台,使用capistrano, rvm, passenger来部署 rails 项目 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-18 21:48 |只看该作者 |倒序浏览

在linux平台,使用capistrano, rvm, passenger来部署 rails 项目



1)安装capistrano, rvm, passenger

1.rvm的安装:可以参考(http://beginrescueend.com/rvm/install/

安装给单个用户:




1. bash < <(curl -s https://raw.github.com/wayneeseg ... ripts/rvm-installer )   

如果你遇到无法安装,或者抱怨没有证书,像是下面的错误信息:




1. curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:   
2. error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed  
3. More details here: http://curl.haxx.se/docs/sslcerts.html   

你需要使用下面的命令:




1. bash < <(curl -sk https://raw.github.com/wayneeseg ... ripts/rvm-installer )   

如果还是有相同的问题。你可以在当前用户的根目录下创建 '.curlrc'文件,里面写上 insecure




1. #~/.curlrc   
2. insecure   

rvm安装好以后安装需要的ruby版本




1. rvm install 1.9.2   

这样rvm先搞一段落了。

2.Capistrano,passenger的安装都放在项目的Gemfile文件里面




1. gem 'passenger'   
2. group :development do   
3.   gem 'capistrano'#in production environment, don't need this gem package.   
4. end   

passenger的gem包安装好以后

运行passenger-install-apache2-module 我们用apache做我们的http服务器。

按提示一步一步做,最后会生成一段文字,叫你加入到apache的配置文件里。

类似:




1. LoadModule passenger_module /rvm_path/gems/rvm_gemset/gems/passenger-3.0.11/ext/apache2/mod_passenger.so   
2. PassengerRoot /rvm_path/gems/rvm_gemset/gems/passenger-3.0.11   
3. PassengerRuby /rvm_path/wrappers/rvm_gemset/ruby   

按提示,把这段加到apache的配置文件中去。

apache的配置文件一般在/etc/httpd/conf/httpd.conf

然后你要配置一下,你这个项目的服务信息,添加一个xxx.conf的文件到/etc/httpd/conf.d




1. Listen port   
2.   
3. <VirtualHost *:port>   
4.     ServerName www.example.com   
5.     DocumentRoot /project_root/public   
6.     <Directory /project_root/public>   
7.         AllowOverride all   
8.         Options Indexes -MultiViews   
9.         RailsEnv production#or development, the environment name   
10.     </Directory>   
11. </VirtualHost>   

这时passenger配置也告一段落。

1,2都是production机器上安装配置

3)Capistrano的安装和配置。

由gem来安装,在开发机器上,到项目的根目录下运行




1. capify .   

这个命令会创建2个文件,

Capfile

config/deploy.rb

我们要做的是编辑config/deploy.rb这个文件




1. # RVM bootstrap   
2. $:.unshift(File .expand_path( "~/.rvm/lib" ))   
3. require 'rvm/capistrano'   
4. set :rvm_ruby_string ,  'ruby-1.9.2-p290@rails313' #这个值是你要用rvm的gemset。名字要和系统里有的要一样。   
5. set :rvm_type ,  :user   # Don't use system-wide RVM   
6. #这个不能少,否则部署不了。   
7.   
8. #下面的部署信息,应该都很清楚吧。   
9. #some parameter setting   
10.   set :host ,server_name #set your server name   
11.   set :port_number , server_port #set your server port   
12.   set :rails_env , rails_env   
13.      
14.   # main details   
15.   set :application , application_name   
16.   role :app ,  "#{host}"   
17.   role :web ,  "#{host}"   
18.   role :db ,   "#{host}" ,  :primary  =>  true   
19.   
20.   # server details   
21. #  default_run_options[:pty] = true   
22.   set :use_sudo ,  false   
23.   set :user , user_name   
24.   if  user_pw. nil ?   
25.     ssh_options[:keys ] = %w(./lib/dsa_ssh_key)   
26.   else   
27.     set :password , user_pw   
28.   end   
29.   set :deploy_to ,  "#{deploy}/#{application}" #set your application path   
30.      
31.      
32.   # repo details use svn to manage code   
33.   set :repository ,  svn_repo   
34.   set :scm ,  :subversion   
35.   set :deploy_via ,  :export   
36.   set :scm_username ,  'username'   
37.   set :scm_password ,  'password'   
38.   set :runner ,  nil   
39.      
40.   # runtime dependencies   
41.   depend :remote ,  :command ,  "monit"   
42.   depend :local ,  :command ,  "svn"   
43.   depend :remote ,  :gem ,  "bundler"   
44.   
45.   # tasks   
46.   namespace :deploy   do   
47.     task :start ,  :roles  =>  :app   do   
48.       run "touch #{current_path}/tmp/restart.txt"   
49.     end   
50.      
51.     task :stop ,  :roles  =>  :app   do   
52.       # Do nothing.   
53.     end   
54.      
55.     desc "Restart Application"   
56.     task :restart ,  :roles  =>  :app   do   
57.       run "touch #{current_path}/tmp/restart.txt"   
58.     end   
59.   end   
60.      
61.   namespace :bundler   do   
62.     desc "Install for production"   
63.     task :install ,  :roles  =>  :app   do   
64.       run "cd #{release_path} && bundle install"   
65.     end   
66.      
67.   end   
68.   after 'deploy:update_code' ,  'bundler:install'   

部署文件搞定了。

开始部署。




1. cap deploy :setup   

初始化一些目录,在production服务器上。




1. cap deploy   

可能出现的问题,如果用mysql做数据库的话,可能你有些跟mysql相关的gem包没有安装,根据提示安装就可以了。




1. cap deploy :migrate   

数据迁移,可能出现的问题,你的production数据库并没有创建,所以在服务器上先把数据库创建好了。

Capistrano的配置也搞一段落。

这时候,会有一些问题出现。

1)如果在项目的根目录下存在'.rvmrc'文件


这个文件的作用就是每次进去项目的根目录,自动切换到对应的rvm gemset环境

文件的内容:




1. #!/usr/bin/env bash   
2. ruby_string="ruby-1.9.2-p290"   
3. gemset_name="rails313"   
4. if rvm list strings | grep -q "${ruby_string}" ; then   
5.   # Load or create the specified environment   
6.   if [[ -d "${rvm_path:-$HOME/.rvm}/environments" \   
7.     && -s "${rvm_path:-$HOME/.rvm}/environments/${ruby_string}@${gemset_name}" ]] ; then  
8.     \. "${rvm_path:-$HOME/.rvm}/environments/${ruby_string}@${gemset_name}"  
9.   else   
10.     rvm --create  "${ruby_string}@${gemset_name}"   
11.   fi   
12. else   
13.   # Notify the user to install the desired interpreter before proceeding.   
14.   echo "${ruby_string} was not found, please run 'rvm install ${ruby_string}' and then cd back into the project directory."  
15. fi   

这个文件,在进入根目录后会自动执行,不过需要添加信任,

所以我们要在用户的根目录下添加 .rvmrc 文件

内容:




1. rvm_trust_rvmrcs_flag=1   

如果不添加这个文件,访问服务器的时候passenger会报个错误。说是.rvmrc需要添加信任。



2)因为使用rvm所以要在项目的config目录下添加一个load的配置文件

名字:setup_load_paths.rb




1. if  ENV[ 'MY_RUBY_HOME' ] && ENV[ 'MY_RUBY_HOME' ].include?( 'rvm' )   
2.   begin   
3.     rvm_path     = File .dirname( File .dirname(ENV[ 'MY_RUBY_HOME' ]))   
4.     rvm_lib_path = File .join(rvm_path,  'lib' )   
5.     $LOAD_PATH .unshift rvm_lib_path   
6.     require 'rvm'   
7.     RVM.use_from_path! File .dirname( File .dirname(__FILE__))   
8.   rescue  LoadError   
9.     # RVM is unavailable at this point.   
10.     raise   "RVM ruby lib is currently unavailable."   
11.   end   
12. end   
13.   
14. # Pick the lines for your version of Bundler   
15. # If you're not using Bundler at all, remove all of them   
16.   
17. # Require Bundler 1.0     
18. ENV['BUNDLE_GEMFILE' ] =  File .expand_path( '../Gemfile' ,  File .dirname(__FILE__))   
19. require 'bundler/setup'   

这样基本上所有的配置都全了,可以访问服务器了。如果有错误,应该是一些gem包没有装全,安装一下就好。参考其他人写的一些配置信息,我做了一下总结,和可能出现的错误。

enjoy it!

论坛徽章:
0
2 [报告]
发表于 2012-02-19 15:56 |只看该作者
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP