使用Capistrano自动化Zend框架应用程序部署

时间:2012-03-14 15:54:40

标签: php zend-framework deployment capistrano

过去几个小时,我一直在努力与Capistrano一起为Zend框架应用程序自动部署。会喜欢一些指导。

我的目录结构如下

<project name>/
     Capfile
     application/
         configs/
            deploy/
                staging.rb
            application.ini
            deploy.rb
         controllers/
         models/
     .
     .
     .
     other framework folders and files

我的Capfile是

require 'rubygems'
require 'railsless-deploy'
require 'capistrano/ext/multistage'

load 'deploy' if respond_to?(:namespace) # cap2 differentiator

我的deploy.rb是(scm信息省略)

set :application, "App"

set :stages, %w(staging production)
set :default_stage, "staging"
set :stages_dir, "application/configs/deploy/"

default_run_options[:pty] = true

set :deploy_via, :remote_cache
set :scm, "git"
set :ssh_options, {:forward_agent => true}
set :repository, "git@github.com:<details>"
set :branch, "staging" 

我的部署文件夹中的staging.rb是(凭据省略)

role :app, "host name"
role :web, "host name"
role :db, "host name", :primary => true

set :deploy_to, "/httpdocs/"

set :user, "username"
set :password, "password"

我正在使用VPS,但我不认为我处于需要在服务器端调试的阶段。 Capistrano说即使我定义了它也无法检测到暂存任务。错误是

triggering load callbacks
the task `staging' does not exist

我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为你的stage_dir行应该是:

set :stage_dir, "application/configs/deploy/"

即。 stage_dir而不是stages_dir

编辑:我不熟悉无轨部署,但从查看它必须覆盖一些标准的Capistrano部署配方。既然您使用的多级宝石也会做同样的事情,我猜这两者是不兼容的。您获得的错误肯定表明多级扩展未被使用。

我在很久以前写了一篇关于使用Capistrano部署ZF应用程序的博客文章 - http://tfountain.co.uk/blog/2009/5/11/zend-framework-capistrano-deployment - 也使用了多阶段。你采取的方法非常相似。如果您不介意放弃无轨道部署(至少作为实验),我建议调整您的Capfile和deploy.rb以匹配该帖子中的内容(从而删除无轨道部署的要求),并查看是否修复了您的问题。