Acabei comprando um MacBook Pro, projetos em Rails usando windows estavam se tornando um sofrimento, em todos os projetos eu tinha que usar uma gambiarrazinha para o Attachment_fu funcionar, GIT eu já tinha desistido e RMagick era um sofrimento para instalar… isso são algumas coisas que me fizeram mudar para o MAC (está certo que agora não tenho mais meu 3D Studio sem ter que reiniciar no windows e também não tenho jogos :( ) mas em compensação agora posso ter um ambiente de trabalho muito mais estavel e confiável além de ser 100% compatível com todas as coisas do RAILS.
obs.: Antes que amantes do Linux reclamem dizendo que eu poderia instala-lo, me defendo dizendo que as coisas não eram tão faceis. Metade dos meus programas deixariam de funcionar e nunca fui muito fã do GIMP e nem do Blender :).
Desenvolvendo em Rails, Capistrano era algo que eu sempre sentia falta, mas já tinha desistido por causa do GIT no Windows e SVN sempre foi bem chato. Agora isso não era mais problema… :D
Aproveitando a dificuldade que tive para encontrar informações centralizadas sobre Capistrano com GIT e como tive um pouco de problemas para colocar o Capistrano funcionando no RailsPlayground em sharedhosting vou compartilhar os passos para colocar seu projeto funcionando com Capistrano e GIT.
Portanto não sou expert nem em GIT nem em Capistrano, mas os passos abaixo serviram para mim e podem ajudar mais pessoas. (também recomendo fortemente que você leia o livro de GIT do peepcode , é excelente ). Você também pode encotrar um cheat sheet de GIT neste link. Correções, sugestões e complementos são bem vindos.
Passo 1 – GIT:
Primeiro é importante colocar seu projeto rodando com GIT. Não vou explicar como instala-lo pois já existe muito material sobre isso. Mas depois da instalação o que precisamos fazer é a configuração global:
no terminal, digite
1 2 3 |
git config --user.name "Daniel Lopes" git config --user.email "danielvlopes@areacriacoes.com.br" |
Desta forma você já terá seu arquivo .gitconfig configurado, mas também podemos abrir este arquivo direto em algum editor de texto e altera-lo, também é possivel alterar esses valores apenas chamando o mesmo comando novamente.
Para ver o conteúdo do .gitconfig você pode navegar até o diretório de seu usuário basta fazer como abaixo:
1 2 |
cat ~/.gitconfig
|
Lembrando que para quem não está acostumado com Unix ainda o ~ diz respeito a pasta do usuário, no meu caso /Users/daniellopes .
Em meu arquivo de config também adicionei cores, como abaixo:
1 2 3 4 5 6 7 |
[user] name = Daniel Lopes email = danielvlopes@gmail.com [color] status = auto branch = auto |
Passo 2
Agora basicamente o que temos que fazer é navegar para dentro do diretório do nosso projeto Rails e depois criar um arquivo .gitignore (este arquivo serve para dizer ao GIT o que ignorar).
O conteúdo para os meus projetos é algo mais ou menos assim:1 2 3 4 5 6 7 |
log/*.log
tmp/**/*
.DS_Store
doc/api
doc/app
config/database.yml
|
Salve este arquivo no raiz de seu projeto. Agora inicie um repositório git no seu aplicativo:
Passo 3
git init |
git add . |
em seguida execute
git statuse veja que todos os arquivos foram adicionados. Agora precisamos realizar o primeiro commit em nosso projeto.
git commit -m "commit inicial"
Agora trabalhe normalmente e executando git add “nome do arquivo” e git commit -m “mensagem” (ou talvez execute git commit -a -m “mensagem” para adicionar todos os arquivos).
Passo 4
No entanto agora precisamo empurrar tudo isso que fizemos para um servidor remóto, será deste servidor que o capistrano irá baixar o código atual e colocar no serivdor onde nosso aplicativo em produção se encotrará.
Como estou trabalhando com Railsplayground e eles não tem suporte a SSH para GIT precisamos criar um arquivo .netrc na pasta de nosso usuário no meu caso Users/daniellopes , este arquivo será responsável por autenticar nosso usuário no servidor da RailsPlayground.
No meu caso o conteúdo está assim:
1 2 3 4 |
machine meudominio.svnrepository.com login meuusuario password minhasenha |
Passo 5
Agora sim podemos dizer ao git qual será a url do nosso repositório remóto. Existem duas forma de fazer isso, através do comando abaixo no terminal:
1 2 |
git remote add origin git://meudominio/pub/meuproj/projeto.git
|
Ou editando o arquivo config dentro do diretório .git do nosso projeto. Para isso basta digitar mate .git/config (ou abrir o arquivo em qualquer editor de texto) a partir do rails do seu projeto Rails. Dentro do arquivo você deve colocar algo como abaixo no final do arquivo:
1 2 3 |
[remote "origin"] url = http://domain.svnrepository.com/git/projeto |
Se você fizer através do comando git remote e depois abrir o .git/config verá que o comando já inseriu estes valores.
Ótimo, tudo ok… só precisamos enviar nossos arquivos para o repositório remóto. Para isso basta:
1 2 |
git push origin master |
Passo 6
Agora precisamos instalar(para quem estiver no Mac OSX Leopard, apenas atualizar) o capistrano. No terminal execute:
1 2 |
gem install capistrano |
Se estiver no Leopard execute gem update capistrano .
Passo 7
Agora no diretório de seu projeto execute o comando:
1 2 |
capify . |
Este comando irá criar alguns arquivos necessários para utilizar o capistrano, como por exemplo o arquivo deploy.rb dentro de sua pasta config. Abrindo o arquivo você verá algo parecido como abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
set :application, "set your application name here" set :repository, "set your repository location here" # If you aren't deploying to /u/apps/#{application} on the target # servers (which is the default), you can specify the actual location # via the :deploy_to variable: # set :deploy_to, "/var/www/#{application}" # If you aren't using Subversion to manage your source code, specify # your SCM below: # set :scm, :subversion role :app, "your app-server here" role :web, "your web-server here" role :db, "your db-server here", :primary => true |
Passo 8
Agora precisamos trocar estes valores para as configurações ideais para nosso projeto. Como estamos usando GIT precisamos dizer isso e também precisamo dizer qual é o endereço do repositório GIT ao qual o capistrano terá acesso. No meu caso estou RailsPlayground e para solicitar um repositório GIT basta pedir no suporte que em alguns minutos eles enviam um usuário do painel administrativo onde você irá criar o repositório GIT e atribuir permissão a algum usuário.
O meu arquivo de deploy por enquanto será algo parecido com isso:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# ============================================================== # SET's # ============================================================== default_run_options[:pty] = true set :repository, "http://meudominio.svnrepository.com/git/projeto" set :scm, "git" set :scm_passphrase, "senha_do_repositorio" set :scm_user, "usuario_do_repositorio" set :user, "usuario_do_servidor_onde_sera_enviado_os_arquivos" set :domain, "meudominio.com.br" set :application, "meu_aplicativo" set :use_sudo, false #railsplayground nao aceita sudo set :branch, "master" #branch que sera copiado set :deploy_to, "/home/#{user}/#{application}" #pasta para onde serao enviados os arquivos set :deploy_via, :remote_cache set :git_shallow_clone, 1 set :remote, user set :scm_verbose, true set :copy_cache, true set :keep_releases, 3 # mantem 3 versoes, posso fazer ate 3 rollbacks de versao # ============================================================== # ROLE's # ============================================================== role :web, domain role :app, domain role :db, domain, :primary => true # ============================================================== # TASK's # ============================================================== task :after_update_code, :roles => [:web, :db, :app] do run "chmod 755 #{release_path}/public -R" end |
Desta forma estou configurando o SCM (source code manager) para GIT, apontando para onde será enviado os arquivos e depois rodando um CHMOD para alterar os privelégios. Estou usando use_sudo false pois no RailsPlaygroudn não podemos executar sudo.
Ótimo desta forma agora a única coisa que precisamos fazer é executar:
1 2 3 |
cap deploy:setup cap deploy:cold |
Passo 9
Utilizamos deploy:cold pois é nosso primeiro deploy, depois disso podemos apenas rodar cap deploy e nossa app irá para o ar. Mas uma coisa é um certo o problema, e se tivermos uma pasta de onde os usuário fazem upload por exemplo… perderemos tudo sempre que fizermos deploy? Para este tipo de caso podemos utilizar a pasta shared criada pelo capistrano no servidor, nela estão os arquivos compartilhados entre os releases… podemos por exemplo utilizar esta pasta para guarda um copia do nosso database.yml e enviroment.rb e copia-los através de uma task em nosso deploy.rb.
Por enquanto vamos resolver o problema da pasta de uploads. Abra seu deploy.rb novamente e acrescente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
namespace :assets do task :symlink, :roles => :app do assets.create_dir run <<-CMD rm -rf #{release_path}/public/images/upload && ln -nfs #{shared_path}/upload #{release_path}/public/images/upload CMD end task :create_dir, :roles => :app do run "mkdir -p #{shared_path}/upload" end end |
Nesta tarefa nós criamos um link simbólico da pasta /images/upload do projeto para a pasta #{shared_path}/upload #{release_path}/public/images/upload do capistrano.
Conclusão
Depois de executar o upload, Capistrano irá criar um estrutura de diretórios contendo os releases de sua aplicação e a pasta de arquivos compartilhados. Existem muitas coisas importantes para aprender com capistrano como rollbacks, tela de manutenção, stages e etc.
Lembrando que capistrano e git é muito além disso e não podemos cobrir tudo em um tutorial (mesmo porque eu não sei tudo :D ), mas isto já é o suficiente para você colocar seu projeto no ar apenas usando cap deploy no terminal.
Para saber mais sobre git aconselho fortemente que compre o livro de GIT do peepcode . E para ter mais informações sobre capistrano com git veja este screencast de Scolt Chacon . Um material interessante para aprender sobre git é http://www.gitcasts.com/ . E por fim para trabalhar com git no github basta seguir http://github.com/guides
Espero que este material ajude a melhorar seu processo de deploy e agilizar mais ainda seu desenvolvimento, e sempre, melhorando a qualidade.
8 Comentários to “Capistrano com GIT, Tutorial Básico”
Silva Developer diz:
25/06/2008 em 09:27 AM
Como sempre mais uma excelente dica e contribuição para a comunidade web.
Abraço,
Silva Developer
Weldys Santos diz:
25/06/2008 em 09:54 AM
Sempre é bom ver pessoas que colaboram com a comunidade. Parabéns pela iniciativa e obrigado por me fazer inveja com seu mac novo… :P
Davis Zanetti Cabral diz:
25/06/2008 em 10:15 AM
Uma dica para não manter a senha do teu repositório no script: set(:scm_password) { Capistrano::CLI.password_prompt(“GIT password: “) }
Muito bom o artigo, também hospedo na railsplayground e tive problemas e nem pude sair atrás de estudar isso. O artigo me economizou algumas horas.
Abraço!
daniel lopes diz:
25/06/2008 em 11:30 AM
Obrigado pela dica Davis.
Fernando Campos diz:
08/07/2008 em 08:44 PM
Parabéns pelo tutorial Daniel Lopes! Quero migrar meus projetos para o Git, mas não sei como vou fazer, pois utilizo Uma aplicação que se chama Codecharge no PHP. Todos os meus projetos são feitos nele, e para cada site tenho quatro projetos independentes rodando. Nem imagino como fazer isso com Git… Um abraço! Fernando
Daniel Lopes diz:
08/07/2008 em 09:44 PM
Olá, este tutorial também serve para você iniciar com PHP, leia o livro do PeepCode que falei no tópico que com certeza será capaz de usar GIT com PHP. Outra coisa que é legal você dar uma olhada na github.com, muito fácil de usar e excelente.
Eduardo Fiorezi diz:
05/08/2008 em 08:40 PM
Muitoo bom o tutorial… :)
Mas agora o Railsplayground tem GIT,, só pedir pra ativar lá,,, ;)
Daniel Lopes diz:
07/08/2008 em 06:35 PM
De fato, eles tem git sim. Não precisa usar o deploy :via_copy, vou alterar a explicação no tutorial. O chato do git na railsplayground é que você nao consegue logar por SSH no server deles, mas de resto é ótimo.
Comentário
CATEGORIAS
HomeDesign
SEO
Empreendimento
Cifras
Ruby e Rails
Flex
Photoshop
Flash
XHTML/CSS
JavaScript
Variados
Database
Firefox
Projetos
3D
Projetos
TextMate
Smalltalk
Mac
Livros
ARQUIVO
02/2010 (1)01/2009 (4)
12/2009 (7)
11/2009 (4)
10/2009 (10)
09/2009 (7)
08/2009 (6)
07/2009 (12)
06/2009 (5)
05/2009 (6)
04/2009 (9)
03/2009 (14)
02/2009 (18)
01/2009 (14)
12/2008 (20)
11/2008 (18)
10/2008 (9)
09/2008 (12)
08/2008 (6)
07/2008 (12)
06/2008 (10)
05/2008 (15)
04/2008 (19)



PomoDo e Pomodoro Technique
comentado por wander lima
Vetores Grátis - VectorLab Pack
comentado por ADR
Richtext Editor WYSIWYG
comentado por Phelipp de Avila
Validators em Flex3
comentado por amigo
GAIA, o maior amigo do programador Flash
comentado por amigo