【问题标题】:Capistrano deployment from svn failing来自 svn 的 Capistrano 部署失败
【发布时间】:2015-07-05 06:30:06
【问题描述】:

我正在尝试使用 capistrano 2 将我的应用程序从 subversion 部署到本地服务器。这是我尝试部署的代码,它只是默认的 rails 应用程序:

https://www.assembla.com/code/capistranotest/subversion/nodes

这是我的 deploy.rb 文件,它指向我的 svn repo:

set :application, "CapistranoTest"
set :user, "jack"
set :repository,  "https://subversion.assembla.com/svn/capistranotest/"

set :scm, :subversion

set :deploy_to, "/home/jaeren/capistranotest"

role :web, "192.168.169.129"
role :app, "192.168.169.129"
role :db,  "192.168.169.129", :primary => true

set :scm_username, "jack"
set :runner, "jack"

set :use_sudo, false

我的 cap deploy:setup 工作并创建了必要的文件夹。但是,当我运行 cap deploy:cold 并在提示我的 assembla 帐户时输入我的用户名和密码时,我收到此错误。谁能告诉我为什么?

Jacks-MacBook-Pro:capistranotest Jack$ cd trunk
Jacks-MacBook-Pro:trunk Jack$ cap deploy:cold
  * 2015-04-27 00:31:45 executing `deploy:cold'
  * 2015-04-27 00:31:45 executing `deploy:update'
 ** transaction: start
  * 2015-04-27 00:31:45 executing `deploy:update_code'
    executing locally: "svn info https://subversion.assembla.com/svn/capistranotest/ --username \"jack\"--password \"\"--no-auth-cache  -rHEAD"
Authentication realm: <https://subversion.assembla.com:443> Assembla Restricted Area
Password for 'jack--password': *************************

Authentication realm: <https://subversion.assembla.com:443> Assembla Restricted Area
Username: jack
Password for 'jack': *************************

    command finished in 53369ms
  * executing "svn checkout -q --username \"jack\"--password \"\"--no-auth-cache  -r6 https://subversion.assembla.com/svn/capistranotest/ /home/jack/capistranotest/releases/20150426233238 && (echo 6 > /home/jack/capistranotest/releases/20150426233238/REVISION)"
    servers: ["192.168.169.129"]
    [192.168.169.129] executing command
 ** [192.168.169.129 :: err] Authentication realm: <https://subversion.assembla.com:443> Assembla Restricted Area
 ** [192.168.169.129 :: err] Password for 'jack--password':
Password: 
 ** [192.168.169.129 :: err] Authentication realm: <https://subversion.assembla.com:443> Assembla Restricted Area
 ** [192.168.169.129 :: err] Username:

--编辑--

尝试更改为 capistrano 2.12.0,它输出不同的命令,但我仍然收到相同的错误:

Jaerens-MacBook-Pro:trunk Jaeren$ cap deploy:cold
  * executing `deploy:cold'
  * executing `deploy:update'
 ** transaction: start
  * executing `deploy:update_code'
    executing locally: "svn info https://subversion.assembla.com/svn/capistranotest/ --username jaeren --password  --no-auth-cache  -rHEAD"
Authentication realm: <https://subversion.assembla.com:443> Assembla Restricted Area
Username: Jaeren
Password for 'Jaeren': ***********

    command finished in 8473ms
  * executing "svn checkout -q --username jaeren --password  --no-auth-cache  -r6 https://subversion.assembla.com/svn/capistranotest/ /home/jaeren/capistranotest/releases/20150427001157 && (echo 6 > /home/jaeren/capistranotest/releases/20150427001157/REVISION)"
    servers: ["192.168.169.129"]
    [192.168.169.129] executing command
 ** [192.168.169.129 :: err] Authentication realm: <https://subversion.assembla.com:443> Assembla Restricted Area
 ** [192.168.169.129 :: err] Username:

谢谢。

【问题讨论】:

    标签: ruby-on-rails svn capistrano


    【解决方案1】:

    看起来它正在尝试以jack--password 进行身份验证,因为在用户名的值和它后面的--password 选项之间没有空格。

    executing locally: "svn info https://subversion.assembla.com/svn/capistranotest/ --username \"jack\"--password \"\"--no-auth-cache  -rHEAD"
    

    我怀疑这是执行该命令的任何错误,可能是 Capistrano 的内置程序。尝试升级到最新的 Capistrano,如果不能解决问题,请在 Capistrano 项目上提交 GitHub 问题。

    【讨论】:

    • 这是有道理的。但是我刚刚更改为 capistrano 2.12.0 并得到了一个不同的错误,即我在帖子中编辑的完整输出
    • 我也不太清楚为什么 capistrano 需要我的密码。我可以在本地机器上签出此存储库,而无需输入任何用户信息
    【解决方案2】:

    瑞恩·比格是正确的。 Capistrano 用于登录远程 SVN 存储库的 SVN 身份验证任务中存在错误。

    我正在运行 Capistrano 2.15.6 版,相关文件的路径位于

    capistrano-YOURVERSION/lib/capistrano/recipes/deploy/scm/subversion.rb
    

    打开此文件进行编辑,并在底部查找身份验证定义块。

    def authentication
        username = variable(:scm_username)
        return "" unless username
        result = %(--username "#{variable(:scm_username)}")
        result << %(--password "#{variable(:scm_password)}") unless variable(:scm_auth_cache) || variable(:scm_prefer_prompt)
        result << "--no-auth-cache " unless variable(:scm_auth_cache)
        result
    end
    

    请注意--password 和--no-auth-cache 连接到结果变量时缺少空格。我只是在这里添加了一个空格

    def authentication
        username = variable(:scm_username)
        return "" unless username
        result = %(--username "#{variable(:scm_username)}")
        result << %( --password "#{variable(:scm_password)}") unless variable(:scm_auth_cache) || variable(:scm_prefer_prompt)
        result << " --no-auth-cache " unless variable(:scm_auth_cache)
        result
    end
    

    检查存储库时,可能不会提示 OP 输入 SVN 凭据,因为他们已针对其 SSH 用户保存密码。 Capistrano 接受 SCM 凭据,因此它不需要在部署期间提示用户输入它们。您看到提示输入详细信息的原因是因为在上面的代码中没有额外的空格,它看起来好像 Capistrano 正在尝试在不发送密码的情况下进行身份验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多