当尝试部署到我的登台服务器时,我在Capistrano尝试创建database.yml文件的时刻出现错误。
目前我的gitIgnore文件中有database.yml文件(我已尝试使用它)。
我之前从未遇到过这个问题所以我真的不知道如何调试这个问题。
非常感谢任何帮助。
部署日志:
executing `deploy:symlink'
* executing "rm -f /home/deploy/example.com/current && ln -s /home/deploy/example.com/releases/20130219164028 /home/deploy/example.com/current"
servers: ["example.com"]
[example.com] executing command
command finished in 1893ms
triggering after callbacks for `deploy:symlink'
* executing `deploy:copy_database_yml'
* executing "ln -s /home/deploy/example.com/shared/data/development /home/deploy/example.com/releases/20130219164028/solr/data/live"
servers: ["example.com"]
[example.com] executing command
command finished in 1867ms
* executing "ln -s /home/deploy/example.com/shared/config/database.yml /home/deploy/example.com/releases/20130219164028/config/database.yml"
servers: ["example.com"]
[example.com] executing command
** [out :: example.com] ln: creating symbolic link `/home/deploy/example.com/releases/20130219164028/config/database.yml'
** [out :: example.com] : File exists
command finished in 2086ms
*** [deploy:symlink] rolling back
*** no previous release to rollback to, rollback of symlink skipped
*** [deploy:update_code] rolling back
* executing "rm -rf /home/deploy/example.com/releases/20130219164028; true"
servers: ["example.com"]
[example.com] executing command
command finished in 2640ms
failed: "env PATH=/home/deploy/example.com/bin:$PATH GEM_HOME=/home/deploy/example.com/gems sh -c 'ln -s /home/deploy/example.com/shared/config/database.yml /home/deploy/example.com/releases/20130219164028/config/database.yml'" on example.com
我的deploy.rb文件的内容
set :stages, %w(staging integration live)
set :default_stage, "staging"
require 'capistrano/ext/multistage'
require "bundler/capistrano"
default_run_options[:pty] = true
set :application, "Example"
set :use_sudo, false
set :keep_releases, 5
# If you aren't using Subversion to manage your source code, specify
# your SCM below:
#set :people, 'root'
#set :ssh_options, { :forward_agent => true }
namespace :deploy do
desc "Restarting mod_rails with restart.txt"
task :restart, :roles => :app, :except => {:no_release => true} do
run "touch #{current_path}/tmp/restart.txt"
end
[:start, :stop].each do |t|
desc "#{t} task is a no-op with mod_rails"
task t, :roles => :app do
;
end
end
# Avoid keeping the database.yml configuration in git.
desc "task to create a symlink for the database files."
task :copy_database_yml do
run "ln -s #{shared_path}/data/development #{release_path}/solr/data/live"
run "ln -s #{shared_path}/config/database.yml #{release_path}/config/database.yml"
run "rm -rf #{release_path}/public/photos"
run "ln -s #{shared_path}/public/photos #{release_path}/public/photos"
run "rm -rf #{release_path}/public/hobby_photos"
run "ln -s #{shared_path}/public/hobby_photos #{release_path}/public/hobby_photos"
run "chmod 777 -R #{release_path}"
#run "cd #{release_path}; bundle exec rake db:migrate RAILS_ENV=staging"
# run "cd #{release_path}/ & rake db:migrate RAILS_ENV=staging"
end
end
after "deploy:symlink", "deploy:copy_database_yml"
答案 0 :(得分:3)
看起来你的眼睛正好在你面前回答。
** [out :: example.com] ln: creating symbolic link `/home/deploy/example.com/releases/20130219164028/config/database.yml'
** [out :: example.com] : File exists
修改您的deploy:copy_database_yml以首先删除符号链接,或仅在它不存在时创建它。 顺便说一下,这个任务的功能远远超过它的名字所暗示的,这很糟糕。
答案 1 :(得分:0)
在创建符号链接时,似乎是Capistrano的问题。
尝试在deploy.rb文件中注释角色:
#role :app, %w{deploy@yourhost.com}
#role :web, %w{deploy@yourhost.com}
#role :db, %w{deploy@yourhost.com}