使用Passenger在Dreamhost上面部署Rails应用

 

 Wanstrath tweet 关于在Dreamhost上使用Passenger感言,提醒了我,我应该写一点我的经验。我在Dreamhost上面有一些小的Rails应用,使用的还算满意。

此文是建立在这篇文章基础上的, Git’n Your Shared Host On , 为了使用我下面提供的Capistranoas文件更好的部署,你需要一个源码控制工具。

共三个步骤。 创建你的站点,capify你的应用,部署。一旦你这样做过几次,这些步骤你只需要花几分钟,但是如果你是新手,即使你花了几个小时也不要沮丧,因为之后每次你都会更快一点的。

1. 创建你的站点

第一件事情是你需要使用Dreamhost的panel 来创建你的站点。登陆以后,点击 “Domains”, 然后 “Manage Domains” 然后 “Add new domain / sub-domain”. Dreamhost上的Rails app对于php app有两个不同点:

  1. 请务必选中 “Ruby on Rails Passenger”。
  2. 指定你的web目录: yourdomain.com/current/public .

看下面图#1中高亮部分的截图。注意 :如果你没有设置 current/public 作为你的web目录,你可能获得前所未有的失败经验。

Add Domain Screen
Figure #1 : Adding a Domain in DH’s Panel

值得一提的是,无论你是选择一个存在的用户还是创建一个新的用户,请确保这Users区域里更新这个用户为shell 访问,否则他将不会有这样的权利。

因为你设置了你的web目录是current/public, Dreamhost 会自动的为你创建一个目录。一定要ssh登陆到你的服务器,移除当前的这个current 目录(rm -rf current ), 以便Capistrano可以适当的用它作为一个 symlink 到你应用的当前版本。

2. Capify你的应用

现在这个站点被创建好了,接下来安装和配置 Capistrano. cd 到你的应用目录,并且像这样运行capify :

$ cd yourapp
$ capify .

 

它会在你项目的根目录增加一个 Capfile 文件,并且在config/下面增加一个deploy.rb文件。打开 config/deploy.rb ,你可以用下面的部署文件,我已经在多个DH Rails应用上使用了。

default_run_options[:pty] = true
# be sure to change these

set :user, 'username'
set :domain, 'yourdomain.com'
set :application, 'yourapp'
# the rest should be good
set :repository,  "#{user}@#{domain}:git/#{application}.git"
set :deploy_to, "/home/#{user}/#{domain}"
set :deploy_via, :remote_cache
set :scm, 'git'
set :branch, 'master'
set :git_shallow_clone, 1
set :scm_verbose, true
set :use_sudo, false

server domain, :app, :web
role :db, domain, :primary
 => true
namespace :deploy do
  task :restart do
    run "touch #{current_path}/tmp/restart.txt"
end
end

 

这个部署文件和我之前提到的git setup 一起工作。看这cap文件是多么简单? 只需要配置你的用户,应用的domain,以及应用的名字就好了。关键是要重新定义deploy:restart任务, 创建一个restart.txt文件。

3. 安装和部署

一旦你用DH 控制面板创建了这个站点,也capified了你的应用,那么你只需要运行Capistrano的安装和部署命令就行了。

$ cap deploy:setup
$ cap deploy:migrations # to deploy and run migrations

 

就这样。 你的应用现在应该可以跑了。第一次失败并不可怕, 你能挖掘并试图解决了为什么不能工作的这个问题,那你就赚了。Rails ,Dreamhost和Passenger的部署真的是easy, 但是你可能需要花一些时间去真正理解以及学习如何排除故障。

你可能感兴趣的:(Web,应用服务器,capistrano,git,Rails)