我刚刚完成第一次 Capistrano 安装。大部分内容都保留为默认设置,我配置了我的服务器、其身份验证、远程文件夹以及对 git 存储库的访问。
我使用 capistrano 将 php 代码部署到我的服务器。
上限分期部署 and 上限生产部署函数,但是他们将每个命令运行两次。当这些任务在服务器上执行得太快时,有时会导致问题,返回错误代码,从而停止部署过程。
我运行时的输出示例上限分期部署
DEBUG[47ecea59] Running /usr/bin/env if test ! -d ~/www/test_server/repo; then echo "Directory does not exist '~/www/test_server/repo'" 1>&2; false; fi on ftp.cluster013.ovh.net
DEBUG[47ecea59] Command: if test ! -d ~/www/test_server/repo; then echo "Directory does not exist '~/www/test_server/repo'" 1>&2; false; fi
DEBUG[c450e730] Running /usr/bin/env if test ! -d ~/www/test_server/repo; then echo "Directory does not exist '~/www/test_server/repo'" 1>&2; false; fi on ftp.cluster013.ovh.net
DEBUG[c450e730] Command: if test ! -d ~/www/test_server/repo; then echo "Directory does not exist '~/www/test_server/repo'" 1>&2; false; fi
它对每一个任务都执行相同的操作,除了我自己定义的任务(在我的deploy.rb中,我定义了一个 :set_distant_server 任务,它在带有服务器信息的文件中移动)
我很确定在初始配置过程中我错过了一些东西。
这是我的 capfile,仍为默认设置:
# Load DSL and Setup Up Stages
require 'capistrano/setup'
# Includes default deployment tasks
require 'capistrano/deploy'
# Includes tasks from other gems included in your Gemfile
# require 'capistrano/rvm'
# require 'capistrano/rbenv'
# require 'capistrano/chruby'
#require 'capistrano/bundler'
#require 'capistrano/rails/assets'
#require 'capistrano/rails/migrations'
# Loads custom tasks from `lib/capistrano/tasks' if you have any defined.
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
接下来是我的deploy.rb 文件:
# 配置仅对 Capistrano 3.1 有效
锁定'3.2.1'
set :scm, :git
set :application, 'Application name'
# I use token authentification
set :repo_url, 'https://XXXXXXXXXXX:@XXXXXXX.git'
set :role, 'web'
# Default value for :log_level is :debug
set :log_level, :debug
set :tmp_dir, 'www/test_server/tmp'
set :keep_releases, 8
role :deploy_server, "XXXuser_name@XXXX_server"
task :set_distant do
on roles(:deploy_server) do
execute 'echo ------------******* STAGING *******------------'
execute 'cp ~/www/test_server/current/access_distant.php ~/www/test_server/current/access.php'
execute 'cp ~/www/test_server/current/session_distant.php ~/www/test_server/current/session.php'
end
end
after "deploy:finished", :set_distant
这是我的 staging.rb,更短:
server 'XXX_server', user: 'XXXuser_name', roles: %w{web}, port: 22, password: 'XXXpassword'
set :deploy_to, '~/www/test_server'
set :branch, 'staging'
和我的 Production.rb 非常相似:
server 'XXX_server', user: 'XXXuser_name', roles: %w{web}, port: 22, password: 'XXXpassword'
set :deploy_to, '~/www/beta/'
我很确定我错过了使其正常运行的所有先决条件中的一个步骤。我对 ruby、gems 很陌生,并且很长一段时间没有使用 shell。
有谁知道为什么这些命令运行两次,以及我该如何修复它?
预先,非常感谢。
附加信息:
Ruby 版本:ruby -v
ruby 2.1.2p95(2014-05-08 修订版 45877)[x86_64-darwin13.0]
Capistrano 版本:cap -V
Capistrano 版本:3.2.1(Rake 版本:10.1.0)
我没有创建 Gemfile 或设置它,我知道 Capistrano 3 中不需要它。无论如何,我不知道该怎么做。