ускорить развертывание с капистрано в рельсах 3.1 - PullRequest
1 голос
/ 25 марта 2012

Я загрузил приложение в рабочем режиме на линоде.

Я хочу внести изменения в локальное приложение в css, javascript, контроллерах, моделях или любом другом файле, который мне нужен, изменить или обновить код и после развертывания в моем удаленном приложении.

Я использую capistrano, и у меня есть этот рецепт в deploy.rb файле.

$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load pathe
require "rvm/capistrano"                  # Load RVM's capistrano plugin.
require "bundler/capistrano"
set :rvm_ruby_string, 'ruby-1.9.2-p318@global'  
set :rvm_type, :user
set :application, "app.com"
set :user, 'myuser'
set :repository,  "#{user}@ip.ip.ip.ip:~/app"
ssh_options[:forward_agent] = true

set :scm, :git
set :use_sudo, false
set :keep_releases, 1
set :deploy_to, "~/#{application}"
#set :deploy_via, :copy
set :deploy_via, :remote_cache

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

Проблема в том, что когда я запускаю cap deploy процесс очень очень медленный занимает 5 или 6 минут в развертывании. Если я хочу изменить 2 файла или добавить гем, я хочу обновить только те файлы, которые изменились.

Как я могу ускорить развертывание с Capistrano. С git я иду очень быстро, но у меня есть, что введите больше команды, git add. git commit ...

Примечание **

У меня есть проверка с set :deploy_via, :remote_cache, но я получаю ошибки с разрешениями в журнале capistrano: O.

Журнал Capistrano после cap deploy

[ip.ip.ip.ip] executing command
    [ip.ip.ip.ip] rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell 'ruby-1.9.2-p318@global' -c 'if [ -d ~/app.com/shared/cached-copy ]; then cd ~/app.com/shared/cached-copy && git fetch -q origin && git fetch --tags -q origin && git reset -q --hard e142768dc6351878cb45712dca8d31ead4ffb40c && git clean -q -d -x -f; else git clone -q myuser@ip.ip.ip.ip:~/app ~/app.com/shared/cached-copy && cd ~/app.com/shared/cached-copy && git checkout -q -b deploy e142768dc6351878cb45712dca8d31ead4ffb40c; fi'
 ** [ip.ip.ip.ip :: err] Permission denied, please try again.
 ** [ip.ip.ip.ip :: err] Permission denied, please try again.
 ** [ip.ip.ip.ip :: err] Permission denied (publickey,password).
 ** [ip.ip.ip.ip :: err] fatal: The remote end hung up unexpectedly
    command finished in 1337ms
*** [deploy:update_code] rolling back
  * executing "rm -rf ~/app.com/releases/20120325150641; true"
    servers: ["ip.ip.ip.ip"]
    [ip.ip.ip.ip] executing command
    [ip.ip.ip.ip] rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell 'ruby-1.9.2-p318@global' -c 'rm -rf ~/app.com/releases/20120325150641; true'
    command finished in 702ms
failed: "rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell 'ruby-1.9.2-p318@global' -c 'if [ -d ~/app.com/shared/cached-copy ]; then cd ~/app.com/shared/cached-copy && git fetch -q origin && git fetch --tags -q origin && git reset -q --hard e142768dc6351878cb45712dca8d31ead4ffb40c && git clean -q -d -x -f; else git clone -q myuser@ip.ip.ip.ip:~/app ~/app.com/shared/cached-copy && cd ~/app.com/shared/cached-copy && git checkout -q -b deploy e142768dc6351878cb45712dca8d31ead4ffb40c; fi'" on 109.74.195.41

После создания каталога cached-copy

myuser@myuser:~/app.com/current$ if [ -d ~/app.com/shared/cached-copy ]; 
> then cd ~/app.com/shared/cached-copy && git fetch -q origin && git fetch --tags -q origin && git reset -q --hard e142768dc6351878cb45712dca8d31ead4ffb40c && git clean -q -d -x -f; else git clone -q myuser@ip.ip.ip.ip:~/app ~/app.com/shared/cached-copy && cd ~/app.com/shared/cached-copy && git checkout -q -b deploy e142768dc6351878cb45712dca8d31ead4ffb40c; fi
myuser@ip.ip.ip.ip's password: 
myuser@ip.ip.ip.ip:~/app.com/shared/cached-copy$

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 25 марта 2012

Если вы обновляете только пару файлов, вам часто не нужно развертывать приложение целиком.Для этой цели Capistrano имеет задачу deploy:upload:

cap deploy:upload FILES=file1,file2,file3

Поскольку он ожидает файлы в переменной окружения, загружать несколько файлов вместе с ним довольно сложно.Я написал этот скрипт, чтобы его было немного проще использовать:

#!/bin/bash
cap deploy:upload FILES=`perl -le 'print join "," => @ARGV' $@`

Сохраните его где-нибудь на своем пути, и вы можете просто передавать пути в качестве аргументов командной строки.Затем перезапустите приложение:

upload app/models/{user,product}.rb config/application.rb
cap deploy:restart
1 голос
/ 25 марта 2012

Первое, что я бы посоветовал ускорить, - это запустить deploy_via: remote_cache.Вы должны убедиться, что удаленный пользователь может пройти аутентификацию в вашем git-репо, что означает настройку вашего SSH-ключа на удаленном сервере для подключения.

Попробуйте установить это:

ssh_options[:forward_agent] = true

Github имеетотличная статья о том, как заставить его работать:

http://help.github.com/deploy-with-capistrano/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...