2011-08-20 175 views
0

我正在使用Ruby on Rails 3.0.9,并试图设置Capistrano创业板(下面的敏捷Web开发与导轨书 - 第四版)。我在远程机器上设置了git和所有相关目录\文件(它工作)以及与Capistrano相关的所有“基本”事情。现在,如果我从我的本地机器上运行下面的命令,如预期的工作:在服务器上部署与Capistrano

cap deploy:setup 
# ... 

cap deploy:check 
# ... 
# You appear to have all necessary dependencies installed 

这时我的项目目录中,我有以下目录(由Capistrano的创建):

<my_project_dir>/releases 
<my_project_dir>/shared 

没有更多

我现在应该做什么?例如,我是否需要将所有应用程序文件从本地计算机上传到远程计算机?

P.S .:我也设置我的Apache2服务器指向<my_project_dir>/current/public目录,但Capistrano没有创建该文件夹。


UPDATE@Alex

如果我运行cap deploy命令我得到以下几点:

* executing `deploy' 
    * executing `deploy:update' 
** transaction: start 
    * executing `deploy:update_code' 
    updating the cached checkout on all servers 
    executing locally: "git ls-remote [email protected]<SERVER_IP_ADDRESS>:/git/<my_project_name>.com.git master" 
    command finished in 3086ms 
    * executing "if [ -d /srv/www/<my_project_name>.com/shared/cached-copy ]; then cd /srv/www/<my_project_name>.com/shared/cached-copy && git fetch -q origin && git fetch --tags -q origin && git reset -q --hard 36ccf7b6f63041ee8dcdf4ca0a7c0b10dbc8bad1 && git clean -q -d -x -f; else git clone -q [email protected]<SERVER_IP_ADDRESS>:/git/<my_project_name>.com.git /srv/www/<my_project_name>.com/shared/cached-copy && cd /srv/www/<my_project_name>.com/shared/cached-copy && git checkout -q -b deploy 36ccf7b6f63041ee8dcdf4ca0a7c0b10dbc8bad1; fi" 
    servers: ["<SERVER_IP_ADDRESS>"] 
    [<SERVER_IP_ADDRESS>] executing command 
** [<SERVER_IP_ADDRESS> :: err] Host key verification failed. 
** [<SERVER_IP_ADDRESS> :: err] fatal: The remote end hung up unexpectedly 
    command finished in 396ms 
*** [deploy:update_code] rolling back 
    * executing "rm -rf /srv/www/<my_project_name>.com/releases/20110820175634; true" 
    servers: ["<SERVER_IP_ADDRESS>"] 
    [<SERVER_IP_ADDRESS>] executing command 
    command finished in 353ms 
failed: "sh -c 'if [ -d /srv/www/<my_project_name>.com/shared/cached-copy ]; then cd /srv/www/<my_project_name>.com/shared/cached-copy && git fetch -q origin && git fetch --tags -q origin && git reset -q --hard 36ccf7b6f63041ee8dcdf4ca0a7c0b10dbc8bad1 && git clean -q -d -x -f; else git clone -q [email protected]<SERVER_IP_ADDRESS>:/git/<my_project_name>.com.git /srv/www/<my_project_name>.com/shared/cached-copy && cd /srv/www/<my_project_name>.com/shared/cached-copy && git checkout -q -b deploy 36ccf7b6f63041ee8dcdf4ca0a7c0b10dbc8bad1; fi'" on <SERVER_IP_ADDRESS> 

failed: ...在最后一行。问题是什么?

+0

你有没有尝试帽部署? – Alex

+0

@Alex - 我更新了问题。 – Backo

+0

您是否使用公钥/私钥对使用SSH访问机器? – Alex

回答

3

因为您的git repo位于部署服务器本身上,所以Capistrano也有同样的困难。只需将deploy_via变量设置为:copydeploy.rb修复:

set deploy_via :copy 
+0

谢谢,它解决了我的问题。 – Backo

0

你可以做两件事情:

  • 帽部署:安装 这将设置任何显示目录,符号链接等:Capistrano的需要
  • 帽部署:检查 这将确保一切设置弥补帽
  • 帽部署:冷 该部署并启动所有配置的守护进程(如杂种,阿帕奇,无论你使用)
+0

'cap deploy:cold'不起作用。它会生成我添加到更新问题中的错误。 – Backo

0

您必须首次执行cap deploy:cold,然后再使用cap deploycap deploy:migrations部署应用程序。

这些命令可以将代码从本地机器或从远程git存储库复制到生产服务器。

看看这里的配置选项:http://help.github.com/deploy-with-capistrano/

上述命令还将创建符号链接<my_project_dir>/current

以上错误表明你的服务器是无法从GitHub克隆git仓库。使用应用程序用户在服务器机器中生成SSK密钥对,并将公钥上传到github部署密钥。

+0

我在哪里可以找到一个Web资源,解释如何“使用应用程序用户在服务器计算机中生成SSK密钥对并将公钥上传到github部署密钥”?那么,什么意思是“对github部署密钥”? – Backo

+0

顺便说一句:我正在运行Ubuntu 10.04的远程机器上部署。 – Backo

+0

请确保您能够在远程计算机上成功运行该命令:git clone -q root @:/ git/ .com.git /srv/www/.com/shared/缓存副本 –

1
[<SERVER_IP_ADDRESS>] executing command 

** [:: ERR]主机密钥验证失败。 ** [:: ERR]致命:远程端挂了出乎意料

在我的情况,这是由具有我的git仓库建立与一个ssh URL引起的。

我能通过ssh登录主机,然后执行'ssh',然后接受主机密钥来解决这个问题。