Instalação fácil de uma aplicação Rails - Parte 1

Como todos já sabem, agora a Locaweb suporta Ruby on Rails nas hospedagens Linux compartilhada. Recentemente finalizamos a atualização da maioria das máquinas. 

Para saber se sua conta tem o novo suporte ou não, basta digitar o comando ‘rails -v’. Se o resultado for 2.1.0 ou superior, é porque sua hospedagem conta com Phusion Passenger. Caso contrário, será necessário abrir um chamado para migrar para as novas máquinas.

Finalmente, o objetivo deste post é fazer com que você, que já tem sua aplicação pronta ou está para começar uma, consiga rapidamente colocá-la em produção. A primeira coisa a fazer é configurar no Painel de Controle da Locaweb o apontamento do seu domínio (ex. railsdemo.tecnologia.ws) para a pasta na sua hospedagem (ex. /public_html/demo). Veja neste outro arquivo para mais detalhes sobre o Painel de Controle.

Feito isso, estou considerando que você não é um usuário já avançado em Rails - por isso esse artigo se chama “Parte 1″. Além disso, estou assumindo que você está utilizando algum ambiente Linux ou Mac. Para Windows depois faço outro post. Pretendo colocar pelo menos mais um ou dois artigos nesta série sobre deployment. O ponto chave se chama Capistrano

Agora, na sua máquina local execute os seguintes passos:

Para começar, instale o capistrano:

sudo gem install capistrano

Agora, instale uma nova gem que eu mesmo acabei de colocar no ar, da seguinte forma:

gem sources -a http://gems.github.com

sudo gem install akitaonrails-locarails

Pronto, agora crie um novo projeto Rails ou então entre no seu projeto já pronto e de lá digite o seguinte comando:

locarails .

Ele irá fazer uma série de perguntas sobre sua hospedagem. No caso: seu usuário da conta no Linux, o dominio que registrou no painel de controle, o diretorio (nome da aplicacao) que tambem apontou no Painel e os dados do MySQL (usuario, senha, servidor, nome do banco). Por enquanto ainda não coloquei suporte ao Postgres, mas isso virá em breve.

Se terminar tudo bem, agora execute este comando:

cap deploy:setup

Isso irá preparar o ambiente na sua conta Linux remota. Provavemente ele pedirá a senha da sua conta Linux, tenha ela em mãos.

Finalmente, basta executar este comando:

cap deploy

E tudo estará no ar no dominio que voce pediu - salvo em caso de ainda ter o tempo de propagação do DNS ou o Apache ainda não ter sido recarregado (ele é recarregado a cada 2 horas).

A gem locarails deve ser instalada somente na sua máquina local!

E toda vez que precisar colocar uma nova versão da sua aplicação em produção, simplesmente execute o comando ‘cap deploy’ e ele fará todo o necessário. O mais interessante: se em algum momento você subir um código com erros na sua hospedagem, seu site sair do ar por causa disso e você não souber como consertar rapidamente, execute este comando:

cap deploy:rollback

E isso voltará seu site exatamente à versão anterior que estava funcionando, em segundos!!

Observação Importante: a gem akitaonrails-locarails ainda é experimental! Somente a utilize se sua aplicação não for crítica! Qualquer feedback, sugestões ou reportar bugs nesta gem em específico, enviem e-mail diretamente para mim em fabio.akita@locaweb.com.br. Este procedimento não tem suporte oficial ainda.

Tags: , , , ,

21 respostas to “Instalação fácil de uma aplicação Rails - Parte 1”

  1. Rafael Says:

    Akita.
    Estou iniciando em JRuby no NetBeans, em Windows. Quando você abordar o deploy no Windows será possivel fazê-lo também com JRuby?
    Abraços
    Rafael

  2. AkitaOnRails Says:

    Rafael, nossas hospedagens tem o serviço de JVM Dedicado. Como o JRuby roda sobre Java, o produto correto seria esse. Nesse artigo estou falando de Ruby puro sobre Apache. Para entender mais sobre deployment de JRuby veja este link:

    http://www.javaworld.com/community/?q=node/1270

    No caso o artigo fala de Tomcat. Será necessário adaptar um pouco para rodar sobre Tomcat ou JBoss, no caso, basta pegar o arquivo .war gerado pelo warble e jogar na pasta de deployment do tomcat para que ele faça auto-depoy.

  3. Maykon L. Capellari Says:

    Olá estou tentando fazer o deploy de uma aplicação usando este plugin, mas quando uso o cap deploy ele começa a fazer o upload mas nao encotra as pastas dentro do release (images, javascripts, stylesheets e database.yml) da pasta public e config.
    Ele mostra que criou mas na verdade nao cira e acaba dando erro.

    O que poderia fazer para arrumar?

  4. AkitaOnRails Says:

    Provavelmente você instalou o novo Capistrano 2.5.0, que foi lançado poucos dias atrás. Digite ‘cap -v’ para ter certeza. Se aparecer ‘Capistrano v2.5.0′ faça o seguinte:

    sudo gem uninstall capistrano –version=2.5.0

    Se você ainda não tinha instalado o Capistrano anterior, instale desta forma:

    sudo gem install capistrano –version=2.4.3

    Existe alguma diferença entre essas duas versões que torna meu script incompatível. Vou investigar e criar a correção, mas enquanto isso, se manter no Capistrano 2.4.3 resolve o problema.

  5. Daniel Oliveira Says:

    Funcionou perfeitamente, uma duvida caso eu crie sub-pastas na pasta public tenho que rodar o setup novamente ou apenas deploy montará corretamente ?

  6. AkitaOnRails Says:

    @Daniel, não entendi. Cada aplicação Rails tem uma pasta public onde ficam somente arquivos que podem ser acessados diretamente (como imagens, stylesheets, javascript, html estático). Não se deve colocar código Ruby ou mesmo outra aplicação Rails dentro do public.

    Não sei se entendi direito, mas se criar sub-pastas no public, elas estão automaticamente disponíveis para acessar via browser. O setup deve ser rodado apenas uma vez, e depois não precisa mais.

  7. Clovis Says:

    cap deploy:setup
    the task `deploy:setup’ does not exist

    sabe pq isto pode estar acontecendo ?

  8. Ricardo Says:

    Olá,

    Estou tentando instalar a gem locarails n minha hospedagem, porém aparece a seguinte mensagem:

    [ideiasoftware@hm1429 ~]$ gem install akitaonrails-locarails –source=http://gems.github.com
    ERROR: While executing gem … (Errno::EACCES)
    Permission denied - /usr/lib/ruby/gems/1.8/cache/akitaonrails-locarails-1.1.6.gem

    como solucionar?

  9. Patrick Espake Says:

    Akita,

    Eu fiz a minha aplicação em rails 1.2.6.

    Quando eu executo o comando cap deploy ele aborta no final, está aparecendo o seguinte:

    executing “cd /home/patrickespake/rails_app/irai/releases/20090107010417 && rake db:migrate RAILS_ENV=production”
    servers: ["www.patrickespake.com"]
    [www.patrickespake.com] executing command
    *** [err :: http://www.patrickespake.com /home/patrickespake/rails_app/irai/releases/20090107010417/config/boot.rb:20:Warning: Gem::SourceIndex#search support for String patterns is deprecated
    *** [err :: http://www.patrickespake.com
    *** [err :: http://www.patrickespake.com /usr/lib/ruby/gems/1.8/gems/actionmailer-1.3.6/lib/action_mailer/vendor/tmail/mailbox.rb:225: [BUG] object allocation during garbage collection phase
    *** [err :: http://www.patrickespake.com ruby 1.8.6 (2008-08-08) [i386-linux]
    *** [err :: http://www.patrickespake.com
    ** [out :: http://www.patrickespake.com (in /home/patrickespake/rails_app/irai/releases/20090107010417)
    *** [err :: http://www.patrickespake.com sh: line 1: 18194 Aborted rake db:migrate RAILS_ENV=production
    command finished
    *** [before_symlink] rolling back
    *** [deploy:update_code] rolling back
    * executing “rm -rf /home/patrickespake/rails_app/irai/releases/20090107010417; true”
    servers: ["www.patrickespake.com"]
    [www.patrickespake.com] executing command
    command finished
    command “cd /home/patrickespake/rails_app/irai/releases/20090107010417 && rake db:migrate RAILS_ENV=production” failed on http://www.patrickespake.com

  10. AkitaOnRails Says:

    @Clovis digite “cap -v” a versão precisa ser 2.5. Parece que você está com uma antiga.

    @Ricado, você precisa instalar na sua máquina local e não dentro da hospedagem!

    @Patrick, leia o log: ele diz que o rake db:migrate falhou. Pode ser que seu config/database.yml esteja mal configurado. Por exemplo, veja se o ítem ‘host’ aponta para um endereço de mysql que realmente existe (tente pingá-lo por exemplo).

  11. Ludy Amano Says:

    Olá Akita,

    gostaria de saber se posso utilizar esse método para fazer deploy que não seja de um aplicativo rails, no meu caso me refiro a uma site (php) armazenado em um repositorio git da minha hospedagem.

    abs!

  12. AkitaOnRails Says:

    @Ludy com certeza, o capistrano é uma ferramenta genérica para deployments. Muita gente usa com PHP, se você procurar no google por “capistrano php” vai achar vários tutoriais como este:

    http://devblog.imedo.de/2008/6/23/wordpress-deployment-with-capistrano-2-and-git

  13. Helio Ricardo Says:

    Salve, @akitaonrails.

    Muito obrigado por todo seu esforço.

    Estou tentando dar deploy com o locarails 1.11, cap 2.5 e rails 2.3.2, tanto local quanto em mino hospedagem linux compartilhada.

    o cap deploy:setup ocorre sem problemas, mas no cap deploy chega as seguintes linha e trava:

    * executing `deploy:restart’
    * executing “chmod -R 655 ~/rails_app/projetos/releases/20090401202653″
    servers: ["www.bsconsult.com.br"]
    [www.bsconsult.com.br] executing command
    *** [err :: http://www.bsconsult.com.br chmod: `/home/bsconsult1/rails_app/projetos/releases/20090401202653′: Permission denied
    command finished
    failed: “sh -c \”chmod -R 655 ~/rails_app/projetos/releases/20090401202653\”" on http://www.bsconsult.com.br

    Interessante que mesmo via ssh não consigo rodar o chmod com 655, já com 777 consigo…

    Help! ;-)

    Abrs,
    Hélio

  14. Helio Ricardo Says:

    Em tempo: estou em um mac os x leopard.

    abs,
    Hélio

  15. Patrick Espake Says:

    A Locaweb anda péssima para hospedagem em Rails.

    Tem vezes que são problemas de load no servidor, tem vezes que são problemas de permissões, tem vezes que são problemas de atendimento…

    A qualidade dos serviços está lá embaixo.

  16. Tiago Silva Says:

    Estou com dificuldades para seguir os passos colocados por você LocaRails + Capistrano.

    Meu maior problema está sendo com o Capistrano. Após fazer o procedimento de instalação, nenhum problema é apresentado. Quando eu dou um “cap -v”, a próxima linha aparece vazia, ou seja, a versão não é exibida.

    Quando eu executo o “locarails .”, todos as configurações são feitas (domínio,banco,etc), porém no final, é retornado o seguinte ERRO: Você provavelmente não tem o Capistrano instalado. Já removi e instalei a gem diversas vezes, em versões diferentes, porém o problema persiste.

    Pode me ajudar?

  17. Tiago Silva Says:

    Já consegui resolver…

  18. Edson Says:

    Tiago, como conseguiu resolver seu problema com o Capistrano?
    Tambem estou com o mesmo problema, quando rodo o Locarails ocorre o mesmo erro:

    ERRO: Você provavelmente não tem o Capistrano instalado

    Alguem pode ajudar?

  19. Edson Says:

    Tiago, achei seu post no Forum. Executei o ‘capify .’ como vc tinha feito mas, só consegui rodar o ‘locarails .’ depois que apaguei o deploy.rb criado na pasta config do meu projeto.

    De qualquer forma, fica o registro…

  20. Diego Marczal Says:

    Olá,
    Estou tentando colocar uma app no ar com locarails, tudo parece funcionar, porém quando tento acessar a aplicação recebo o seguinte erro:

    Error message:
    no such file to load — application (MissingSourceFile)
    Exception class:
    Passenger::UnknownError

    Estou usando o rails 2.3.2 congelado na app.

    Alguém poderia me ajudar a resolver isso?

    Obrigado!

  21. AkitaOnRails Says:

    @Diego no Rails 2.3 o app/controllers/application.rb agora precisa ser app/controllers/application_controller.rb. está assim na sua aplicação? Se estiver vamos checar internamente o que pode ser.

Deixe um comentário