Capistrano: связанный файл database.yml не существует на my.server.ipadress
после того, как я попытаюсь развернуть мое приложение через capistrano на свой сервер, я получаю это сообщение об ошибке:
DEBUG [605f198a] Finished in 0.084 seconds with exit status 1 (failed).
ERROR linked file /home/deploy/myrailsapp/shared/config/database.yml does not exist on xx.xxx.xx.xxx
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as [email protected]: exit
SystemExit: exit
Tasks: TOP => deploy:check:linked_files
(See full trace by running task with --trace)
The deploy has failed with an error: Exception while executing as [email protected]: exit
my deploy.rb:
set :deploy_to, '/home/deploy/myrailsapp'
set :linked_files, %w{config/database.yml}
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}
namespace :deploy do
desc 'Restart application'
task :restart do
on roles(:app), in: :sequence, wait: 5 do
execute :touch, release_path.join('tmp/restart.txt')
end
end
after :publishing, 'deploy:restart'
after :finishing, 'deploy:cleanup'
end
namespace :deploy do
after :restart, :clear_cache do
on roles(:web), in: :groups, limit: 3, wait: 10 do
# Here we can do anything such as:
# within release_path do
# execute :rake, 'cache:clear'
# end
end
end
end
Я пробовал этот tut https://www.gorails.com/deploy/ubuntu/14.04, это моя первая попытка с capistrano.
Ответы
Ответ 1
Просто создайте файл /home/deploy/myrailsapp/shared/config/database.yml
вручную и настройте его.
Capistrano не создает (или не управляет) конфигурационный файл из коробки. Таким образом, вы должны сделать это вручную или автоматизировать использование собственных скриптов Capistrano
, Puppet
, Chef
, Ansible
.
Ответ 2
Поскольку я предпочитаю, чтобы мои файлы были центральными на сервере развертывания, я использую эту задачу для развертывания конфигурационных файлов из каталога config в каталог связанных файлов на сервере приложений.
Это использует rsync, так как я использую capistrano-rsync для развертывания.
namespace :deploy do
task :copy_config do
on release_roles :app do |role|
fetch(:linked_files).each do |linked_file|
user = role.user + "@" if role.user
hostname = role.hostname
linked_files(shared_path).each do |file|
run_locally do
execute :rsync, "config/#{file.to_s.gsub(/.*\/(.*)$/,"\\1")}", "#{user}#{hostname}:#{file.to_s.gsub(/(.*)\/[^\/]*$/, "\\1")}/"
end
end
end
end
end
end
before "deploy:check:linked_files", "deploy:copy_config"
Ответ 3
С помощью capistrano-rails 1.2.3, как показано ниже, добавьте его в deploy.rb
## Linked Files & Directories (Default None):
set :linked_files, %w{config/database.yml config/secrets.yml config/nginx.conf}
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}