Capistrano无法部署到远程服务器 [英] Capistrano fails to deploy to remote server

查看:80
本文介绍了Capistrano无法部署到远程服务器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

解决方案

解决方案是将以下内容添加到production.rb的顶部:

The solution was to add the following to the top of production.rb:

$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load path.
require "rvm/capistrano"                  # Load RVM's capistrano plugin.
set :rvm_ruby_string, '1.9.2@rails31dataserver'        # Or whatever env you want it to run in.
set :rvm_bin_path, '/usr/local/rvm/bin'

我之前缺少的部分是set :rvm_bin_path, '/usr/local/rvm/bin',因为我以前从未在Capistrano部署中使用过该配置设置,所以我做了一些.哦,好,整天都在工作.功劳归功于irc.freenode.net上#rvm频道中的tonyflint!

The part I was missing before was set :rvm_bin_path, '/usr/local/rvm/bin' as I've never used that configuration setting in a Capistrano deployment before, and I've done a few. Oh well, all in a days work. Credit goes to tonyflint in the #rvm channel on irc.freenode.net!

原始帖子

Original Post

悬崖笔记

  • 我正在运行RVM的系统安装
  • 我正在通过Capistrano进行部署

我现在很傻.基本上,正在发生的事情是我正在尝试通过Capistrano进行部署,但是失败了,很难.这是我的deploy.rb和production.rb文件的糊状内容(我正在做一个多阶段环境,并省略了staging.rb文件,因为它工作正常). http://pastie.org/2523675 ​​

I'm currently dumbfounded. Basically what's happening is I'm trying to do a deployment via Capistrano and it's failing, hard. Here's the pastie of my deploy.rb and production.rb files (I'm doing a multi-stage environment and omitting the staging.rb file as that's working fine). http://pastie.org/2523675

这是cap production deploy:setup的输出:

$ cap production deploy:setup
  * executing `production'
    triggering start callbacks for `deploy:setup'
  * executing `multistage:ensure'
  * executing `deploy:setup'
  * executing "sudo -p 'sudo password: ' mkdir -p /var/www/html/dataserver /var/www/html/dataserver/releases /var/www/html/dataserver/shared /var/www/html/dataserver/shared/system /var/www/html/dataserver/shared/log /var/www/html/dataserver/shared/pids"
    servers: ["omitted"]
Password: 
    [omitted] executing command
*** [err :: omitted] sudo
*** [err :: omitted] :
*** [err :: omitted] sorry, you must have a tty to run sudo
*** [err :: omitted] 
    command finished in 60ms
failed: "sh -c 'sudo -p '\\''sudo password: '\\'' mkdir -p /var/www/html/dataserver /var/www/html/dataserver/releases /var/www/html/dataserver/shared /var/www/html/dataserver/shared/system /var/www/html/dataserver/shared/log /var/www/html/dataserver/shared/pids'" on omitted

现在,我明白了为什么会这样.我正在远程尝试使用sudo,这是安全的禁忌.因此,这意味着我需要使用default_run_options[:pty] = true.因此,我取消注释并再次运行cap production deploy:setup,所有命令都运行得很好并且很好.部署的目录结构已完成设置.惊人的.现在,我尝试运行cap production deploy,这是输出:

Now, I get why this is happening. I'm remotely trying to use sudo and that's a security no-no. So, that means I need to use default_run_options[:pty] = true. So I uncomment it and run cap production deploy:setup again and all runs nice and dandy. The directory structure for the deployment get's setup and everything. Awesome. Now I try to run cap production deploy and here's the output:

$ cap production deploy
  * executing `production'
    triggering start callbacks for `deploy'
  * executing `multistage:ensure'
  * executing `deploy'
  * executing `deploy:update'
 ** transaction: start
  * executing `deploy:update_code'
    updating the cached checkout on all servers
    executing locally: "hg log -r default --template '{node|short}'"
    command finished in 52ms
  * executing "if [ -d /var/www/html/dataserver/shared/cached-copy ]; then hg pull --repository /var/www/html/dataserver/shared/cached-copy https://cowfish.unh.edu/hg/DataServerApp && hg update --repository /var/www/html/dataserver/shared/cached-copy --clean 6979cec4fc00; else hg clone --noupdate https://cowfish.unh.edu/hg/DataServerApp /var/www/html/dataserver/shared/cached-copy && hg update --repository /var/www/html/dataserver/shared/cached-copy --clean 6979cec4fc00; fi"
    servers: ["omitted"]
Password: 
    [omitted] executing command
 ** [omitted :: out] warning: certificate for omitted can't be verified (Python too old)
 ** [omitted :: out] http authorization required
 ** [omitted :: out] realm: Mercurial Project Repository
 ** [omitted :: out] user:
 ** [omitted :: out] d
 ** [omitted :: out] e
 ** [omitted :: out] p
 ** [omitted :: out] l
 ** [omitted :: out] o
 ** [omitted :: out] y
 ** [omitted :: out]
 ** [omitted :: out] password:
 ** [omitted :: out]
 ** [omitted :: out] warning: certificate for omitted can't be verified (Python too old)
 ** [omitted :: out] warning: certificate for omitted can't be verified (Python too old)
 ** [omitted :: out] warning: certificate for omitted can't be verified (Python too old)
 ** [omitted :: out] requesting all changes
 ** [omitted :: out] warning: certificate for omitted can't be verified (Python too old)
 ** [omitted :: out] warning: certificate for omitted can't be verified (Python too old)
 ** [omitted :: out] adding changesets
 ** [omitted :: out] adding manifests
 ** adding file changes
 ** [omitted :: out] added 11 changesets with 187 changes to 125 files
 ** [omitted :: out] warning: certificate for omitted can't be verified (Python too old)
 ** [omitted :: out] warning: certificate for omitted can't be verified (Python too old)
 ** [omitted :: out] 114 files updated, 0 files merged, 0 files removed, 0 files unresolved
    command finished in 1332ms
    copying the cached version to /var/www/html/dataserver/releases/20110912233835
  * executing "cp -RPp /var/www/html/dataserver/shared/cached-copy /var/www/html/dataserver/releases/20110912233835 && (echo 6979cec4fc00 > /var/www/html/dataserver/releases/20110912233835/REVISION)"
    servers: ["omitted"]
    [omitted] executing command
    command finished in 23ms
  * executing `deploy:finalize_update'
  * executing "chmod -R g+w /var/www/html/dataserver/releases/20110912233835"
    servers: ["omitted"]
    [omitted] executing command
    command finished in 7ms
  * executing "rm -rf /var/www/html/dataserver/releases/20110912233835/log /var/www/html/dataserver/releases/20110912233835/public/system /var/www/html/dataserver/releases/20110912233835/tmp/pids &&\\\n      mkdir -p /var/www/html/dataserver/releases/20110912233835/public &&\\\n      mkdir -p /var/www/html/dataserver/releases/20110912233835/tmp &&\\\n      ln -s /var/www/html/dataserver/shared/log /var/www/html/dataserver/releases/20110912233835/log &&\\\n      ln -s /var/www/html/dataserver/shared/system /var/www/html/dataserver/releases/20110912233835/public/system &&\\\n      ln -s /var/www/html/dataserver/shared/pids /var/www/html/dataserver/releases/20110912233835/tmp/pids"
    servers: ["omitted"]
    [omitted] executing command
    command finished in 8ms
  * executing "find /var/www/html/dataserver/releases/20110912233835/public/images /var/www/html/dataserver/releases/20110912233835/public/stylesheets /var/www/html/dataserver/releases/20110912233835/public/javascripts -exec touch -t 201109122338.35 {} ';'; true"
    servers: ["omitted"]
    [omitted] executing command
 ** [out :: omitted] find: /var/www/html/dataserver/releases/20110912233835/public/images: No such file or directory
 ** [out :: omitted] find: /var/www/html/dataserver/releases/20110912233835/public/stylesheets: No such file or directory
 ** [out :: omitted] find: /var/www/html/dataserver/releases/20110912233835/public/javascripts: No such file or directory
    command finished in 6ms
  * executing `deploy:symlink'
  * executing "rm -f /var/www/html/dataserver/current && ln -s /var/www/html/dataserver/releases/20110912233835 /var/www/html/dataserver/current"
    servers: ["omitted"]
    [omitted] executing command
    command finished in 6ms
 ** transaction: commit
  * executing `deploy:restart'
  * executing "sudo -p 'sudo password: ' touch /var/www/html/dataserver/current/tmp/restart.txt"
    servers: ["omitted"]
    [omitted] executing command
    command finished in 10ms
    triggering after callbacks for `deploy'
  * executing `deploy:migrate'
    triggering before callbacks for `deploy:migrate'
  * executing `sqlite3:link_configuration_file'
  * executing "ln -nsf /var/www/html/dataserver/shared/sqlite_config.yml /var/www/html/dataserver/releases/20110912233835/config/database.yml"
    servers: ["omitted"]
    [omitted] executing command
    command finished in 6ms
  * executing "cd /var/www/html/dataserver/releases/20110912233835 && rake RAILS_ENV=production  db:migrate"
    servers: ["omitted"]
    [omitted] executing command
 ** [out :: omitted] sh: rake: command not found
    command finished in 5ms
failed: "sh -c 'cd /var/www/html/dataserver/releases/20110912233835 && rake RAILS_ENV=production  db:migrate'" on omitted

因此,看来无论它已加载的环境都看不到rake.要查看我创建了部署任务的路径中加载了什么,请看下面的输出:

So it appears that whatever environment it has loaded cannot see rake. To see what is loaded in the path I created a deploy task, here's the output:

$ cap production test_path
  * executing `production'
    triggering start callbacks for `test_path'
  * executing `multistage:ensure'
  * executing `test_path'
  * executing "echo $PATH"
    servers: ["omitted"]
Password: 
    [omitted] executing command
 ** [out :: omitted] /usr/local/bin:/bin:/usr/bin
    command finished in 11ms
  * executing "echo $rvm_path"
    servers: ["omitted"]
    [omitted] executing command
 ** [out :: omitted] 
    command finished in 5ms

现在,您会发现路径绝对不正确.对于正在建立会话的用户,应该为以下内容:

Now you'll notice that path is definitely not correct. For the user that is establishing the session, it should be the following:

/usr/local/rvm/gems/ruby-1.9.2-p290@rails31dataserver/bin:/usr/local/rvm/gems/ruby-1.9.2-p290@global/bin:/usr/local/rvm/rubies/ruby-1.9.2-p290/bin:/usr/local/rvm/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/lpeabody/bin

再次,我明白了为什么这不起作用.这是因为由于我正在运行default_run_options[:pty] = true,所以我的环境正在加载,至少这是我当前的理论.所以,毕竟,我得出的结论是-我需要以某种方式加载我的环境,以便可以在不远程启用sudo的情况下运行rake.

And again, I get why this isn't working. It's because since I'm running default_run_options[:pty] = true my environment is getting loaded, at least that is my current theory. So, after all that, I'm left with the conclusion - I need to somehow get my environment loaded so that rake can run without enabling sudo remotely.

现在,我知道我不是唯一需要这样做的人,因此,将非常感谢您提出任何建议或技巧.现在,我已经花了8个小时的大部分时间来绞尽脑汁,我需要尽快部署此应用.

Now, I know I'm not the only person to ever have needed to do this, so any pointers or tips will be greatly appreciated. I've racked my brain for the greater portion of 8 hours now and I need to get this app deployed ASAP.

推荐答案

解决方案是将以下内容添加到production.rb的顶部:

The solution was to add the following to the top of production.rb:

$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load path.
require "rvm/capistrano"                  # Load RVM's capistrano plugin.
set :rvm_ruby_string, '1.9.2@rails31dataserver'        # Or whatever env you want it to run in.
set :rvm_bin_path, '/usr/local/rvm/bin'

我之前缺少的部分是set :rvm_bin_path, '/usr/local/rvm/bin',因为我以前从未在Capistrano部署中使用过该配置设置,所以我做了一些.哦,好,整天都在工作.功劳归功于irc.freenode.net上#rvm频道中的tonyflint!

The part I was missing before was set :rvm_bin_path, '/usr/local/rvm/bin' as I've never used that configuration setting in a Capistrano deployment before, and I've done a few. Oh well, all in a days work. Credit goes to tonyflint in the #rvm channel on irc.freenode.net!

这篇关于Capistrano无法部署到远程服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆