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有两个不同点:
- 请务必选中 “Ruby on Rails Passenger”。
- 指定你的web目录:
yourdomain.com/current/public
.
看下面图#1中高亮部分的截图。注意 :如果你没有设置 current/public
作为你的web目录,你可能获得前所未有的失败经验。
值得一提的是,无论你是选择一个存在的用户还是创建一个新的用户,请确保这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, 但是你可能需要花一些时间去真正理解以及学习如何排除故障。