Skip to main content
 首页 » 编程设计

ruby-on-rails中通过 sftp 进行 cap 部署上传失败

2024年09月03日31qq78292959

美好的一天!我会尽力具体说明这一点。抱歉,我在尝试部署应用程序时遇到了很多麻烦。我对 Rails 完全陌生,所以我遵循了 Rails 敏捷 Web 开发第 4 版,我陷入了使用 capistrano 部署的部分,我已经尝试了书中的确切代码,但没有工作,并采取了一些来自这个论坛和其他论坛的建议被证明是有帮助的,但我仍然无法正确部署我的deploy.rb如下所示:

require 'bundler/capistrano' 
 
set :user, 'user_created_for_this_example' 
 
set :domain,  'IPADDRESS' 
 
set :application, 'depot' 
 
# file paths 
 
set :repository,  "#{user}@#{domain}:depot.git" 
 
set :deploy_to, "/home/#{user}/#{domain}" 
 
# set :scm, :git # You can set :scm explicitly or Capistrano will make an intelligent guess  
based on known version control directory names 
 
# Or: `accurev`, `bzr`, `cvs`, `darcs`, `git`, `mercurial`, `perforce`, `subversion` or `none` 
 
#roles server 
 
role :web, domain 
 
role :app, domain 
 
role :db, domain, :primary => true 
 
#deploy config 
 
set :deploy_to, "/home/#{user}/#{domain}" 
 
set :deploy_via, :copy 
 
set :scm, 'git' 
 
set :branch, 'master' 
 
set :scm_verbose, true 
 
set :use_sudo, false  
 
 
# if you want to clean up old releases on each deploy uncomment this: 
# after "deploy:restart", "deploy:cleanup" 
 
# if you're still using the script/reaper helper you will need 
# these http://github.com/rails/irs_process_scripts 
 
# If you are using Passenger mod_rails uncomment this: 
 
namespace :deploy do 
 
  task :start do ; end 
 
  task :stop do ; end 
 
  task :restart, :roles => :app, :except => { :no_release => true } do 
 
    run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}" 
 
  end 
 
end 
 
after "deploy:update_code", :bundle_install 
 
desc "install the necesary prerequisites" 
 
task :bundle_install, :roles => :app do 
 
  run "cd #{release_path} && bundle install" 
 
end 

当我运行 capDeploy:setup 和 capdeploy:check 时,一切似乎都工作正常:

~/rails_projects/depot$ cap deploy:setup 
 
  * 2012-11-13 10:37:35 executing `deploy:setup' 
 
  * executing "mkdir -p /home/git/xx.xx.xx.xx /home/git/xx.xx.xx.xx/releases /home/git 
/xx.xx.xx.xx/shared /home/git/xx.xx.xx.xx/shared/system /home/git/xx.xx.xx.xx/shared/log  
/home/git/xx.xx.xx.xx/shared/pids" 
 
    servers: ["xx.xx.xx.xx"] 
 
    [xx.xx.xx.xx] executing command 
 
    command finished in 158ms 
 
  * executing "chmod g+w /home/git/xx.xx.xx.xx /home/git/xx.xx.xx.xx/releases /home/git/xx.xx.xx.xx/shared /home/git/xx.xx.xx.xx/shared/system /home/git/xx.xx.xx.xx/shared/log /home/git/xx.xx.xx.xx/shared/pids" 
 
    servers: ["xx.xx.xx.xx"] 
 
    [xx.xx.xx.xx] executing command 
 
    command finished in 7ms 
 
~/rails_projects/depot$ cap deploy:check 
 
  * 2012-11-13 10:37:39 executing `deploy:check' 
 
  * executing "test -d /home/git/xx.xx.xx.xx/releases" 
 
    servers: ["xx.xx.xx.xx"] 
 
    [xx.xx.xx.xx] executing command 
 
    command finished in 152ms 
 
  * executing "test -w /home/git/xx.xx.xx.xx" 
 
    servers: ["xx.xx.xx.xx"] 
 
    [xx.xx.xx.xx] executing command 
 
    command finished in 5ms 
 
  * executing "test -w /home/git/xx.xx.xx.xx/releases" 
 
    servers: ["xx.xx.xx.xx"] 
 
    [xx.xx.xx.xx] executing command 
 
    command finished in 5ms 
 
  * executing "which tar" 
 
    servers: ["xx.xx.xx.xx"] 
 
    [xx.xx.xx.xx] executing command 
 
    command finished in 6ms 
 
You appear to have all necessary dependencies installed 

但是,当 capDeploy:migrations、capdeploy 或 capdeploy:cold 命令出现时,会弹出下一个:

~/rails_projects/depot$ cap deploy:migrations 
 
  * 2012-11-13 10:37:42 executing `deploy:migrations' 
 
  * 2012-11-13 10:37:42 executing `deploy:update_code' 
 
    executing locally: "git ls-remote <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0b6c627f4b7373257373257373257373" rel="noreferrer noopener nofollow">[email protected]</a>:depot.git master" 
 
    command finished in 241ms 
 
  * getting (via checkout) revision c3f88ca97e5868dd476f20e9a044b7dad800274a to /tmp/20121113173743 
 
    executing locally: git clone <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="37505e43774f4f194f4f194f4f194f4f" rel="noreferrer noopener nofollow">[email protected]</a>:depot.git /tmp/20121113173743 && cd /tmp/20121113173743 && git checkout -b deploy c3f8 
8ca97e5868dd476f20e9a044b7dad800274a 
 
Cloning into '/tmp/20121113173743'... 
 
remote: Counting objects: 392, done. 
 
remote: Compressing objects: 100% (257/257), done. 
 
remote: Total 392 (delta 111), reused 392 (delta 111) 
 
Receiving objects: 100% (392/392), 8.59 MiB, done. 
 
Resolving deltas: 100% (111/111), done. 
 
Switched to a new branch 'deploy' 
 
    command finished in 769ms 
 
  * Compressing /tmp/20121113173743 to /tmp/20121113173743.tar.gz 
 
    executing locally: tar czf 20121113173743.tar.gz 20121113173743 
 
    command finished in 652ms 
 
    servers: ["xx.xx.xx.xx"] 
 
 ** sftp upload /tmp/20121113173743.tar.gz -> /tmp/20121113173743.tar.gz 
 
    [xx.xx.xx.xx] /tmp/20121113173743.tar.gz 
 
*** upload via sftp failed on xx.xx.xx.xx: Net::SFTP::StatusException  
(Net::SFTP::StatusException open /tmp/20121113173743.tar.gz (3, "permission denied")) 
 
upload via sftp failed on xx.xx.xx.xx: Net::SFTP::StatusException (Net::SFTP::StatusException open /tmp/20121113173743.tar.gz (3, "permission denied")) 

如果这是一些虚拟问题,一个简单的修复或一个已经发布的问题,我很抱歉,但我不知道还能尝试什么,再次,我刚刚开始处理这些东西,我真的迷路了。我在同一台机器上运行所有程序,所有 xx.xx.xx.xx 代表我的 IP 地址。任何建议将不胜感激。我已尝试尽可能具体,但如果缺少某些内容,我会发布它。预先感谢您的时间和帮助。

请您参考如下方法:

这里的问题是 sftp 的源位置和目标位置相同:

** sftp upload /tmp/20121113173743.tar.gz -> /tmp/20121113173743.tar.gz 

为了解决此问题,您可以在 config/deploy.rb 文件中指定参数 copy_dir,如下所示:

set :copy_dir, "/tmp/sftp" 

无需手动创建该文件夹。