Ruby on rails Capistrano正在尝试创建/public目录

Ruby on rails Capistrano正在尝试创建/public目录,ruby-on-rails,capistrano,passenger,dreamhost,Ruby On Rails,Capistrano,Passenger,Dreamhost,我目前正在尝试使用Capistrano进行我的第一次Rails部署,我遇到了一个无法克服的障碍。在cap部署期间我收到一个错误“mkdir:cannotcreatedirectory/public'`” 有关详情: Rails版本:3.2.6 Capistrano版本:2.13.5 在Dreamhost上运行 我正在预编译我的资产(我怀疑这是问题的一部分),所以我的Capfile中有load'deploy/assets' 我遵循了这里的指导:在大部分情况下,我也会在网上搜索一些关于Capis

我目前正在尝试使用Capistrano进行我的第一次Rails部署,我遇到了一个无法克服的障碍。在
cap部署期间
我收到一个错误“
mkdir:cannotcreatedirectory
/public'`”

有关详情:
  • Rails版本:3.2.6
  • Capistrano版本:2.13.5
  • 在Dreamhost上运行
  • 我正在预编译我的资产(我怀疑这是问题的一部分),所以我的Capfile中有
    load'deploy/assets'
我遵循了这里的指导:在大部分情况下,我也会在网上搜索一些关于Capistrano的其他文章

deploy.rb
需要“bundler/capistrano”
ssh_选项[:转发_代理]=真
ssh_选项[File.join(ENV[“HOME”]、“.ssh”、“id_rsa-dreamhost”)]
设置:应用程序“”
集合:存储库,“git@bitbucket.org:/#{application}.git“
设置:服务器名称“”
set:scm,:git#您可以显式设置:scm,否则Capistrano将根据已知的版本控制目录名进行智能猜测
#或者:`accurev`、`bzr`、`cvs`、`darcs`、`git`、`mercurial`、`perforce`、`subversion`或`none``
设置:签出,“导出”
set:deploy\u via,:remote\u缓存
集合:分支,“主”
设置:基本路径“/home/”
设置:将部署到“#{base_path}/#{application}”
设置:保持释放,3
设置:用户“'
场景:跑步者
设置:使用_sudo,false
默认运行选项[:pty]=真
设置:共享路径“/home/”
set:release_path,“#{base_path}/#{application}”
角色:web“#您的HTTP服务器、Apache/等
角色:应用程序“”。#这可能与您的“Web”服务器相同
角色:db,“,:primary=>true#Rails迁移将在这里运行
#如果要清理每个部署上的旧版本,请取消注释:
#在“部署:重新启动”、“部署:清理”之后
#如果您仍在使用脚本/收割者助手,则需要
#这些http://github.com/rails/irs_process_scripts
#如果您使用的是乘客mod_rails,请取消注释:
名称空间:deploydo
任务:开始做;结束
任务:停止做;结束
desc“通过触摸Restart.txt文件重新启动应用程序。”
任务:重新启动,:角色=>:app,:except=>{:no\u release=>true}do
运行“touch{File.join(当前路径,'tmp','restart.txt')”
结束
desc“从共享文件夹更新特定于环境的文件。”
任务:symlink_shared,:roles=>[:app]do
运行“ln-s{shared_path}/app_config.yml{release_path}/config/”
运行“rm#{release_path}/config/database.yml”
运行“ln-s{shared_path}/database.yml{release_path}/config/”
运行“rm{release\u path}/public/.htaccess”
运行“ln-s{shared_path}/.htaccess{release_path}/public/”
结束
结束
在“部署:重新启动”之前,“部署:符号链接\u共享”
在“部署:更新代码”之后,“部署:迁移”
cap部署的输出:设置
*2012-12-23 16:49:27执行“部署:设置”
*执行“mkdir-p/home///home///releases/home///home///system/home///log/home///pids”
服务器:[“”]
[]执行命令
命令在263ms内完成
*执行“chmod g+w/home///home///releases/home///home///system/home///log/home///pids”
服务器:[“”]
[]执行命令
命令在261ms内完成
cap部署的输出:检查
*2012-12-23 16:49:45执行“部署:检查”
*执行“test-d/home/////发布”
服务器:[“”]
[]执行命令
命令在265毫秒内完成
*正在执行“测试-w/home//”
服务器:[“”]
[]执行命令
命令在256ms内完成
*执行“test-w/home/////发布”
服务器:[“”]
[]执行命令
命令在256ms内完成
*正在执行“哪个git”
服务器:[“”]
[]执行命令
命令在259ms内完成
*正在执行“测试-w/home/”
服务器:[“”]
[]执行命令
命令在263ms内完成
您似乎已安装了所有必需的依赖项
cap的输出:部署
*2012-12-23 16:51:41执行“部署”
*2012-12-23 16:51:41执行“部署:更新”
**事务:开始
*2012-12-23 16:51:41执行“部署:更新代码”
更新所有服务器上的缓存签出
本地执行:“git ls remotegit@bitbucket.org:/.git master“
命令在1102ms内完成
*执行“如果[-d/home///缓存副本];然后cd/home///缓存副本和git获取-q origin和git获取--tags-q origin和git reset-q--hard 42dfb6a3f529e2293192f5e22c3214b7da55c9b4和&git clean-q-d-x-f;否则git clone-qgit@bitbucket.org://.git/home///cached copy&&cd/home///cached copy&&git checkout-q-b deploy 42dfb6a3f529e2293192f5e22c3214b7da55c9b4;fi”
服务器:[“”]
[]执行命令
命令在3233毫秒内完成
将缓存版本复制到/home///
*执行“cp-RPp/home///cached copy/home//&(echo 42dfb6a3f529e2293192f5e22c3214b7da55c9b4>/home///REVISION)”
服务器:[“”]
[]执行命令
命令在338毫秒内完成
*2012-12-23 16:51:47执行“部署:完成更新”
在回调“部署:完成更新”之前触发
*2012-12-23 16:51:47执行“部署:资产:符号链接”
*执行“ls-x/home/////发布”
服务器:[“”]
[]执行命令
命令在252ms内完成
*正在执行“rm-rf/public/assets&\\\\ n mkdir-p/public&\\\ n mkdir-p/home///assets&&\\\ n ln-s/home///assets/public/assets”
服务器:[“”]
[]执行命令
**[out::]mkdir:无法创建目录“/public”
**[输出::]:权限被拒绝
命令在268毫秒内完成
***[部署:更新\u代码]正在回滚
*执行“rm-rf/home//;true”
服务器:[“”]
[]执行命令
命令在265毫秒内完成
失败:上的“sh-c'rm-rf/public/assets&\\\\ n mkdir-p/public&\\\ n mkdir-p/home///assets&\\\\ n ln-s/home///assets/public/assets”
您可以在out底部附近看到“权限被拒绝”错误
require "bundler/capistrano"

ssh_options[:forward_agent] = true
ssh_options[File.join(ENV["HOME"], ".ssh", "id_rsa-dreamhost")]

set :application, "<app>"
set :repository,  "git@bitbucket.org:<gituser>/#{application}.git"
set :server_name, "<host>"
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`
set :checkout, "export"
set :deploy_via, :remote_cache
set :branch, "master"

set :base_path, "/home/<user>/<domain>"
set :deploy_to, "#{base_path}/#{application}"
set :keep_releases, 3

set :user, '<user>'
set :runner, '<user>'

set :use_sudo, false

default_run_options[:pty] = true

set :shared_path, "/home/<user>/<shared_folder>"
set :release_path, "#{base_path}/#{application}"

role :web, "<host>"                          # Your HTTP server, Apache/etc
role :app, "<host>"                          # This may be the same as your `Web` server
role :db,  "<host>", :primary => true # This is where Rails migrations will run

# 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

  desc "Restart the app by touching the restart.txt file."
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "touch #{File.join(current_path,'tmp','restart.txt')}"
  end

  desc "Update the environment-specific files from the shared folder."
  task :symlink_shared, :roles => [:app] do
    run "ln -s #{shared_path}/app_config.yml #{release_path}/config/"

    run "rm #{release_path}/config/database.yml"
    run "ln -s #{shared_path}/database.yml #{release_path}/config/"

    run "rm #{release_path}/public/.htaccess"
    run "ln -s #{shared_path}/.htaccess #{release_path}/public/"
  end
end

before "deploy:restart", "deploy:symlink_shared"
after "deploy:update_code", "deploy:migrate"
* 2012-12-23 16:49:27 executing `deploy:setup'
  * executing "mkdir -p /home/<user>/<domain>/<app> /home/<user>/<domain>/<app>/releases   /home/<user>/<shared_folder> /home/<user>/<shared_folder>/system  /home/<user>/<shared_folder>/log /home/<user>/<shared_folder>/pids"
    servers: ["<host>"]
    [<host>] executing command
    command finished in 263ms
  * executing "chmod g+w /home/<user>/<domain>/<app>  /home/<user>/<domain>/<app>/releases /home/<user>/<shared_folder>  /home/<user>/<shared_folder>/system /home/<user>/<shared_folder>/log  /home/<user>/<shared_folder>/pids"
    servers: ["<host>"]
    [<host>] executing command
    command finished in 261ms
* 2012-12-23 16:49:45 executing `deploy:check'
  * executing "test -d /home/<user>/<domain>/<app>/releases"
    servers: ["<host>"]
    [<host>] executing command
    command finished in 265ms
  * executing "test -w /home/<user>/<domain>/<app>"
    servers: ["<host>"]
    [<host>] executing command
    command finished in 256ms
  * executing "test -w /home/<user>/<domain>/<app>/releases"
    servers: ["<host>"]
    [<host>] executing command
    command finished in 256ms
  * executing "which git"
    servers: ["<host>"]
    [<host>] executing command
    command finished in 259ms
  * executing "test -w /home/<user>/<shared_folder>"
    servers: ["<host>"]
    [<host>] executing command
    command finished in 263ms
You appear to have all necessary dependencies installed
* 2012-12-23 16:51:41 executing `deploy'
  * 2012-12-23 16:51:41 executing `deploy:update'
 ** transaction: start
  * 2012-12-23 16:51:41 executing `deploy:update_code'
    updating the cached checkout on all servers
    executing locally: "git ls-remote git@bitbucket.org:<gituser>/<app>.git master"
    command finished in 1102ms
  * executing "if [ -d /home/<user>/<shared_folder>/cached-copy ]; then cd /home/<user>/<shared_folder>/cached-copy && git fetch -q origin && git fetch --tags -q origin && git reset -q --hard 42dfb6a3f529e2293192f5e22c3214b7da55c9b4 && git clean -q -d -x -f; else git clone -q git@bitbucket.org:<gituser>/<app>.git /home/<user>/<shared_folder>/cached-copy && cd /home/<user>/<shared_folder>/cached-copy && git checkout -q -b deploy 42dfb6a3f529e2293192f5e22c3214b7da55c9b4; fi"
    servers: ["<host>"]
    [<host>] executing command
    command finished in 3233ms
    copying the cached version to /home/<user>/<domain>/<app>
  * executing "cp -RPp /home/<user>/<shared_folder>/cached-copy /home/<user>/<domain>/<app> && (echo 42dfb6a3f529e2293192f5e22c3214b7da55c9b4 > /home/<user>/<domain>/<app>/REVISION)"
    servers: ["<host>"]
    [<host>] executing command
    command finished in 338ms
  * 2012-12-23 16:51:47 executing `deploy:finalize_update'
    triggering before callbacks for `deploy:finalize_update'
  * 2012-12-23 16:51:47 executing `deploy:assets:symlink'
  * executing "ls -x /home/<user>/<domain>/<app>/releases"
    servers: ["<host>"]
    [<host>] executing command
    command finished in 252ms
  * executing "rm -rf /public/assets &&\\\n        mkdir -p /public &&\\\n        mkdir -p /home/<user>/<shared_folder>/assets &&\\\n        ln -s /home/<user>/<shared_folder>/assets /public/assets"
    servers: ["<host>"]
    [<host>] executing command
 ** [out :: <host>] mkdir: cannot create directory `/public'
 ** [out :: <host>] : Permission denied
    command finished in 268ms
*** [deploy:update_code] rolling back
  * executing "rm -rf /home/<user>/<domain>/<app>; true"
    servers: ["<host>"]
    [<host>] executing command
    command finished in 265ms
failed: "sh -c 'rm -rf /public/assets &&\\\n        mkdir -p /public &&\\\n        mkdir -p /home/<user>/<shared_folder>/assets &&\\\n        ln -s /home/<user>/<shared_folder>/assets /public/assets'" on <host>
set :deploy_to, "/home/<user>/<domain>/<application>"