Displaying articles with tag

Capistrano配置及版本控制实践

Posted by leeseon, Sun Jul 06 18:24:00 UTC 2008

以前一直都将Capistrano 的deploy.rb的文件放在SVN中,最近需要将代码共享给别人一同开发,这才发现了有一个问题,就是我的空间帐号与数据库的密码是不希望让人知道,毕竟知道的人越少越好嘛。

而且最近做了一件傻事,就是以前我都是将


ENV["GEM_HOME"]="/home/yourusername/.gems" 
ENV["GEM_PATH"]="/home/yourusername/.gems:/usr/lib/ruby/gems/1.8" 

这样的配置放在dispatch.fcgi中,现在因为使用了Phusion Passenger (mod_rails)之后,这一段的内容放在了config/enviroment.rb之中,所以在windows上运行rake test时,出现了找不到gems的错误,一时没有想到了这样的问题,还费了半天的功夫:(

于是鉴于这些问题,deploy.rb原则上不需要放在版本控制中的,而且database.yml与enviroment.rb也不需要放在版本控制之中,这些文件可以另外保存,与rails代码分开,放在另一个版本控制之中,并且放在share_dir中,在部署时拷贝到相应的目录之中。

想做到这样,只需要在deploy.rb中增加一个任务

before "deploy:restart", 'deploy:copy_config'
desc "Copy the configuration file " 
task :copy_config, :roles => :app, :except => { :no_release =>  true  }   do
  run "cp -f #{shared_dir}/environment.rb #{current_path}/config/environment.rb" 
  run "cp -f #{shared_dir}/database.yml #{current_path}/config/database.yml" 
end

即可

2 comments | Filed Under: | Tags:

使用Capistrano在Dreamhost上部署mod_rails

Posted by leeseon, Mon May 19 14:44:00 UTC 2008

虽然以前Capistrno 在windows下不能使用,但是自从2.0以后,其实就是可以使用的了。而且现在的2.3还加入了对git的支持。

而且从InfoQ 上得知Tom Copeland 已经使用Capistrano来更新mod_rails了,的确如它所说,只是给这个应用程序建立了一个“restart.txt”文件,就会导致Passenger Phusion/mod_rails重启这个应用程序。的确很简单明了不是吗?

最终的deploy.rb文件看起来会象下面这样

  • set :scm, :subversion
  • set :repository,  "http://yoursvn/trunk"
  • set :svn_username,  "svnuser"
  • set :svn_password,  "svnpassword"
  •  
  • role :app,  "www.yourdomain.com"
  • role :web,  "www.yourdomain.com"
  • role :db,   "www.yourdomain.com" , :primary =>  true
  •  
  • set :deploy_to,  "/home/yourusername/"
  • set :user,  "yourusername"
  • set :password,  "yourpassword"
  •  
  • set :use_sudo,  false
  •  
  • namespace :deploy  do
  •   desc  "restarting mod_rails with restart.txt"
  •   task :restart, :roles => :app, :except => { :no_release =>  true  }  do
  •     run  "touch #{current_path}/tmp/restart.txt"
  •   end
  •  
  •   [:start, :stop].each  do  |t|
  •     desc  "#{t} task is a no-op with mod_rails"
  •     task t, :roles => :app  do  ; end
  •   end
  • end

0 comments | Filed Under: | Tags: