Capistrano развернуть с тонкими серверами - PullRequest
4 голосов
/ 16 мая 2011

играл с Capistrano, чтобы получить автоматическое развертывание между моим сервером и моей машиной для разработки. Я почти настроил его, за исключением того, что Capistrano, похоже, не может запустить мои серверы с помощью команды bundle exec. Я всегда получаю следующую ошибку:

РЕДАКТИРОВАТЬ: файл конфигурации теперь находится в /var/www/apps/current/thin.yml

...
  * executing "sudo -p 'sudo password: ' bundle exec thin start -C /var/www/thin.config.yml"
    servers: ["85.255.206.157"]
    [85.255.206.157] executing command
 ** [out :: 85.255.206.157] Could not locate Gemfile
    command finished in 216ms
failed: "sh -c 'sudo -p '\\''sudo password: '\\'' bundle exec thin start -C /var/www/thin.config.yml'" on 85.255.206.157

Скопировал только последний соответствующий раздел. Все копирование файлов и т. Д. Работает нормально. Это просто запускает кластер, который, кажется, выходит из строя. Вот мой файл deploy.rb, который обрабатывает все вещи Capistrano:

РЕДАКТИРОВАТЬ: файл был изменен на следующие:

require "bundler/capistrano"

# define the application and Version Control settings
set :application, "ESCO Matching Demo"
set :repository,  "svn://192.168.33.70/RubyOnRails/ESCO"
set :deploy_via, :copy

# Set the login credentials for Capistrano
set :user, "kurt"

# Tell Capistrano where to deploy
set :deploy_to, "/var/www/apps"

# Tell Capistrano the servers it can play with
server "85.255.206.157", :app, :web, :db, :primary => true

# Generate an additional task to fire up the thin clusters
namespace :deploy do
  desc "Start the Thin processes"
  task :start do
    sudo "bundle exec thin start -C thin.yml"
  end

  desc "Stop the Thin processes"
  task :stop do
    sudo "bundle exec thin stop -C thin.yml"
  end

  desc "Restart the Thin processes"
  task :restart do
    sudo "bundle exec thin restart -C thin.yml"
  end

  desc "Create a symlink from the public/cvs folder to the shared/system/cvs folder"
  task :update_cv_assets, :except => {:no_release => true} do
    run "ln -s #{shared_path}/cvs #{latest_release}/public/cvs"
  end
end

# Define all the tasks that need to be running manually after Capistrano is finished.
after "deploy:finalize_update", "deploy:update_cv_assets"
after "deploy", "deploy:migrate"

РЕДАКТИРОВАТЬ: Это мой файл thin.yml

---
pid: tmp/pids/thin.pid
address: 0.0.0.0
timeout: 30
wait: 30
port: 4000
log: log/thin.log
max_conns: 1024
require: []

environment: production
max_persistent_conns: 512
server: 4
daemonize: true
chdir: /var/www/apps/current

EDIT: В настоящее время возникают следующие проблемы:

  1. Я получаю сообщение об ошибке Не могу найти GemFile при запуске команды cap deploy из моей системы на последнем этапе: загрузка серверов

  2. Миграции не выполняются

  3. Кажется, я больше не могу запустить кластер вручную. Запускается только один экземпляр thin.

UPDATE: Вот настройки gem env с сервера, на котором я размещаюсь. Эта информация получается с помощью оболочки оболочки и затем запускаем команды:

====================================================================
Welcome to the interactive Capistrano shell! This is an experimental
feature, and is liable to change in future releases. Type 'help' for
a summary of how to use the shell.
--------------------------------------------------------------------
cap> echo $PATH
[establishing connection(s) to 85.255.206.157]
Password: 
 ** [out :: 85.255.206.157] /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
cap> gem env
 ** [out :: 85.255.206.157] RubyGems Environment:
 ** [out :: 85.255.206.157] - RUBYGEMS VERSION: 1.3.6
 ** [out :: 85.255.206.157] - RUBY VERSION: 1.8.7 (2010-01-10 patchlevel 249) [x86_64-linux]
 ** [out :: 85.255.206.157] - INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.8
 ** [out :: 85.255.206.157] - RUBY EXECUTABLE: /usr/bin/ruby1.8
 ** [out :: 85.255.206.157] - EXECUTABLE DIRECTORY: /usr/bin
 ** [out :: 85.255.206.157] - RUBYGEMS PLATFORMS:
 ** [out :: 85.255.206.157] - ruby
 ** [out :: 85.255.206.157] - x86_64-linux
 ** [out :: 85.255.206.157] - GEM PATHS:
 ** [out :: 85.255.206.157] - /usr/lib/ruby/gems/1.8
 ** [out :: 85.255.206.157] - /home/kurt/.gem/ruby/1.8
 ** [out :: 85.255.206.157] - GEM CONFIGURATION:
 ** [out :: 85.255.206.157] - :update_sources => true
 ** [out :: 85.255.206.157] - :verbose => true
 ** [out :: 85.255.206.157] - :benchmark => false
 ** [out :: 85.255.206.157] - :backtrace => false
 ** [out :: 85.255.206.157] - :bulk_threshold => 1000
 ** [out :: 85.255.206.157] - REMOTE SOURCES:
 ** [out :: 85.255.206.157] - http://rubygems.org/

Ответы [ 2 ]

10 голосов
/ 24 мая 2011

Наконец-то решена проблема ... Во-первых, для того, чтобы приложение-пакет хорошо работало с сервером environemnt, следующий скрипт выполняет то, что должен:

require "bundler/capistrano"
default_run_options[:pty] = true

# define the application and Version Control settings
set :application, "ESCO Matching Demo"
set :repository,  "svn://192.168.33.70/RubyOnRails/ESCO"
set :deploy_via, :copy
set :user, "kurt"
set :deploy_to, "/var/www/apps"

# Tell Capistrano the servers it can play with

server "85.255.206.157", :app, :web, :db, :primary => true

# Generate an additional task to fire up the thin clusters
namespace :deploy do
  desc "Start the Thin processes"
  task :start do
    run  <<-CMD
      cd /var/www/apps/current; bundle exec thin start -C config/thin.yml
    CMD
  end

  desc "Stop the Thin processes"
  task :stop do
    run <<-CMD
      cd /var/www/apps/current; bundle exec thin stop -C config/thin.yml
    CMD
  end

  desc "Restart the Thin processes"
  task :restart do
    run <<-CMD
      cd /var/www/apps/current; bundle exec thin restart -C config/thin.yml
    CMD
  end

  desc "Create a symlink from the public/cvs folder to the shared/system/cvs folder"
  task :update_cv_assets, :except => {:no_release => true} do
    run <<-CMD
      ln -s /var/www/shared/cvs /var/www/apps/current/public
    CMD
  end
end

# Define all the tasks that need to be running manually after Capistrano is finished.
after "deploy:finalize_update", "deploy:update_cv_assets"
after "deploy", "deploy:migrate"

Этот скрипт может перемещатьсявписаться в необходимые структуры развертывания и выполнить команды, необходимые для управления тонким процессом. Проблема заключалась в том, что команда cd не была выполнена при запуске их как sudo.Причина этого в том, что cv существует только в оболочке и не является известной командой для sudo.

Вторая проблема заключалась в тонкой конфигурации.Поскольку на thin.yml был маленький тип, тонкие серверы не могли быть запущены.Сценарий ниже запускает кластер из 4 тонких серверов, работающих на порту 4000 -> 4003.

---
pid: tmp/pids/thin.pid
address: 0.0.0.0
timeout: 30
wait: 30
port: 4000
log: log/thin.log
max_conns: 1024
require: []

environment: production
max_persistent_conns: 512
servers: 4
daemonize: true
chdir: /var/www/apps/current
0 голосов
/ 18 мая 2011

Человек, узнайте, куда указывает GEM_HOME или GEM_PATH. Должно быть.

...