Symfony CapiMony任务部署:更新\u代码提取文件失败

Symfony CapiMony任务部署:更新\u代码提取文件失败,symfony,capistrano,symfony-2.3,capifony,Symfony,Capistrano,Symfony 2.3,Capifony,我正在尝试将我的应用程序部署到与Capifony共享的1&1主机上 我正在使用deploy\u via:'copy'策略 我的部署在deploy:update\u code任务中失败 capifony输出: --> Updating code base with copy strategy * getting (via checkout) revision to /tmp/20140120140204 executing locally: cp -R . /tmp/20140

我正在尝试将我的应用程序部署到与Capifony共享的1&1主机上

我正在使用
deploy\u via:'copy'
策略

我的部署在
deploy:update\u code
任务中失败

capifony输出:

--> Updating code base with copy strategy
  * getting (via checkout) revision  to /tmp/20140120140204
    executing locally: cp -R . /tmp/20140120140204
    command finished in 242ms
  * Compressing /tmp/20140120140204 to /tmp/20140120140204.tar.gz
    executing locally: tar czf 20140120140204.tar.gz 20140120140204
    command finished in 1428ms
    servers: ["MyApp"]
 ** sftp upload /tmp/20140120140204.tar.gz -> /tmp/20140120140204.tar.gz
    [MyApp] /tmp/20140120140204.tar.gz
    [MyApp] done
  * sftp upload complete
  * executing "cd /kunden/homepages/16/XXX/htdocs/MyApp/releases && tar xzf /tmp/20140120140204.tar.gz && rm /tmp/20140120140204.tar.gz"
    servers: ["MyApp"]
    [MyApp] executing command
 ** [out :: MyApp] tar (child): /tmp/20140120140204.tar.gz: Cannot open: No such file or directory
 ** [out :: MyApp] tar (child): Error is not recoverable: exiting now
 ** [out :: MyApp] tar:
 ** [out :: MyApp] Child returned status 2
 ** [out :: MyApp] 
 ** [out :: MyApp] tar:
 ** [out :: MyApp] Error is not recoverable: exiting now
 ** [out :: MyApp] 
    command finished in 148ms
*** [deploy:update_code] rolling back
问题:

--> Updating code base with copy strategy
  * getting (via checkout) revision  to /tmp/20140120140204
    executing locally: cp -R . /tmp/20140120140204
    command finished in 242ms
  * Compressing /tmp/20140120140204 to /tmp/20140120140204.tar.gz
    executing locally: tar czf 20140120140204.tar.gz 20140120140204
    command finished in 1428ms
    servers: ["MyApp"]
 ** sftp upload /tmp/20140120140204.tar.gz -> /tmp/20140120140204.tar.gz
    [MyApp] /tmp/20140120140204.tar.gz
    [MyApp] done
  * sftp upload complete
  * executing "cd /kunden/homepages/16/XXX/htdocs/MyApp/releases && tar xzf /tmp/20140120140204.tar.gz && rm /tmp/20140120140204.tar.gz"
    servers: ["MyApp"]
    [MyApp] executing command
 ** [out :: MyApp] tar (child): /tmp/20140120140204.tar.gz: Cannot open: No such file or directory
 ** [out :: MyApp] tar (child): Error is not recoverable: exiting now
 ** [out :: MyApp] tar:
 ** [out :: MyApp] Child returned status 2
 ** [out :: MyApp] 
 ** [out :: MyApp] tar:
 ** [out :: MyApp] Error is not recoverable: exiting now
 ** [out :: MyApp] 
    command finished in 148ms
*** [deploy:update_code] rolling back
如何解决此问题?

capistrano v2 问题源于您缺少共享主机上的
/tmp
目录的权限

您可以使用以下方法更改临时上载目录:

set :copy_remote_dir, deploy_to   # upload to the deploy dir instead of /tmp
现在capistrano/capifony将上传到一个可以再次读取的位置

卡皮斯特拉诺v3
copy\u remote\u dir
在capistrano v3中不可用


中引入的
tmp\u dir
变量。

我认为问题来自sftp上传功能

它尝试在从我的用户目录开始的路径中上载

~/kunden/homepages/16/XXX/htdocs/MyApp/
/kunden/homepages/16/XXX/htdocs/MyApp/
并尝试从服务器根目录开始的路径中提取存档

~/kunden/homepages/16/XXX/htdocs/MyApp/
/kunden/homepages/16/XXX/htdocs/MyApp/
在不更改临时上载的情况下,我必须创建目录:

~/tmp
我使用scp函数解决了这个问题。 只需在deploy.rb文件末尾添加以下内容:

module UseScpForDeployment
  def self.included(base)
    base.send(:alias_method, :old_upload, :upload)
    base.send(:alias_method, :upload,     :new_upload)
  end

  def new_upload(from, to)
    old_upload(from, to, :via => :scp)
  end
end

Capistrano::Configuration.send(:include, UseScpForDeployment)

sftp上传/tmp/20140120140240240204.tar.gz->/tmp/20140120140240240204.tar.gz
->
sftp上传完成
。文件未上载到
~/tmp
,而是
/tmp
。您没有
/tmp
的读取权限(看起来只有写入权限),因此提取失败。我看到该文件已上载到
~/tmp
。并且我的用户具有
/tmp