Ruby On Rails, Ubuntu

Instalação do Nginx + Passenger no Ubuntu 12.04 via apt-get

Este artigo é uma continuação do artigo anterior, Instalação do Ruby 1.9.3 sem RVM ou Rbenv no Ubuntu 12.04.

Se você ainda não seguiu os passos de instalação sugeridos no artigo anterior, faça-os, já que eles são necessários para que os passos seguintes funcionem conforme esperado.

Como explicado no artigo anterior, estamos usando o ppa da Brightbox, que além de nos fornecer uma versão atualizada e otimizada do Ruby, também fornece uma compilação do nginx com passenger, integrados com ruby 1.8.7 ou 1.9.3.

A instalação é feita via apt-get:

sudo apt-get install nginx passenger-common1.9.1

Feito isto, é necessário verificar apenas o arquivo de configurações do nginx e descomentar as duas linhas mencionadas no trecho de configuração do passenger:

  ##
  # nginx-passenger config
  ##
  # Uncomment it if you installed nginx-passenger
  ##

  #passenger_root /usr/lib/phusion-passenger;
  #passenger_ruby /usr/bin/ruby;

Com isso você tem uma instalação funcional do nginx com passenger embutido, e precisa agora apenas gerar uma configuração de virtual host.

Este ultimo passo é o que de fato vai apontar uma “pasta” do seu servidor, para ser disponibilizada pelo nginx quando alguém acessar um determinado domínio.

Vamos colocar o arquivo em /etc/nginx/sites-enabled e reiniciar o servidor (sudo service nginx restart):

server {
    listen 80;
    server_name  meusite.example.com;
    root /var/www/meusite.example.com/public; # <--- apontar pra pasta 'public'
    passenger_enabled on;
}

Está pronto. Nginx + Passenger atendendo requisições em um virtualhost, sem precisar do RVM, do rbenv ou de compilar na mão passenger ou alguma versão do ruby.

Padrão
Ruby On Rails

Instalação do Ruby 1.9.3 sem RVM ou Rbenv no Ubuntu 12.04

Muitas pessoas acabam se frustrando com a instalação do Ruby / Rails quando utilizam o RVM ou o Rbenv, e principalmente na utilização desses dois para uma máquina em produção.

O motivo principal das muitas dores de cabeça é que ambas soluções funcionam alterando variáveis de ambiente da sua shell para disponibilizar algo que o sistema operacional deveria estar fazendo nativamente.

Existem situações em que usar o RVM, principalmente em ambiente de desenvolvimento é desejável, permitindo trocar de versões rapidamente e testar o código, patches de seguranças. Este artigo não quer desmerecer os usos válidos do RVM, mas se ele está te dando dores de cabeça, talvez uma solução mais simples seja o caso.

A solução proposta aqui é utilizar os padrões que o Ubuntu / Debian definiram, ou seja: Debian Packages para instalar o ruby e Update Alternatives (links simbólicos) para trocar entre as versões de ruby disponíveis.

A instalação é composta de alguns poucos comandos. Se você estiver utilizando um ubuntu server, existe um pacote adicional que precisa ser instalado, pois o mesmo não vem instalado por padrão:

sudo apt-get install python-software-properties

Para Ubuntu 12.10+ utilize o comando abaixo:

sudo apt-get install software-properties-common

O comando acima disponibiliza o “add-apt-repository“.

Para prosseguir com a instalação, vamos adicionar um ppa mantido pela Brightbox, uma empresa de hosting especializada em Ruby, do Reino Unido, e realizar a instalação dos pacotes necessários:

sudo apt-add-repository ppa:brightbox/ruby-ng 
sudo apt-get update 
sudo apt-get install build-essential ruby rubygems ruby-switch

Os comandos acima, instalam a versão mais atualizada do ruby 1.8.7 e o comando “ruby-switch” que será responsável por trocar a versão do ruby sendo utilizada no momento, da mesma forma como o RVM e o Rbenv fazem.

Para instalar a versão 1.9.3, você deve rodar o comando a seguir (note que 1.9.1 é um padrão de numeração de versão utilizada pelo Debian, mas acredite, estamos instalando a 1.9.3)

sudo apt-get install ruby1.9.1-full

E por fim, para alterar entre as versões:

sudo ruby-switch --set ruby1.9.1
sudo ruby-switch --set ruby1.8

 Bonus: ao utilizar a versão 1.9.3 disponibilizada pela Brightbox, você estará utilizando uma versão otimizada da mesma, que inclui entre outras coisas, as seguintes modificações:

Este ultimo é o meu favorito, quem ainda não leu o artigo linkado acima, deveria. O novo garbage colector da 2.0 em um resumo simplista, vai economizar muita memória no servidor em comparação com a versão 1.9.3, no entanto, graças a esse backport, você ganha a mesma melhoria já na 1.9.3

Atualizado 23/05/2013: Fiz alguns ajustes no artigo para incluir correções necessárias para funcionar também no Ubuntu 12.10+. Agora sugiro instalar o pacote “ruby-1.9.1-full” que resolverá a falta do “mkmf”que algumas gems necessitam.

Padrão
Ruby On Rails, Ubuntu

Nginx + Passenger no Ubuntu com Upstart

Se você trabalha sério com web, provavelmente já teve que instalar o Nginx para alguma coisa. No Ubuntu a instalação é fácil e simples:

apt-get install nginx

Porém, os pacotes não estão tão atualizados quanto deveriam e, pra piorar, devido a arquitetura do Nginx, não trabalha com módulos plugáveis dinamicamente, como o Apache. Dessa forma a única alternativa de ter o Nginx com Passenger e em versão atualizada, é através do instalador disponível nos Rubygems.

A instalação passa pelos seguintes passos:

gem install passenger
passenger-install-nginx-module

Ao executar a instalação do passenger, basta seguir as instruções e instalar os pacotes que forem necessários. Ao concluir, você terá uma instalação atualizada do Nginx com suporte ao Passenger.

Neste ponto só falta configurar o Upstart para cuidar de iniciar o Nginx toda vez que o servidor for iniciado:

/etc/init/nginx.conf

# nginx

description "nginx http daemon"
author "George Shammas &lt;georgyo@gmail.com&gt;"

start on (filesystem and net-device-up IFACE=lo)
stop on runlevel [!2345]

env DAEMON=/opt/nginx/sbin/nginx
env PID=/var/run/nginx.pid
expect fork
respawn

pre-start script
        $DAEMON -t
        if [ $? -ne 0 ]
                then exit $?
        fi
end script

post-stop script
    start-stop-daemon --stop --pidfile $PID --name nginx --exec $DAEMON --signal TERM
end script

exec $DAEMON

Uma observação importante, para que funcione corretamente o script acima, é necessário que o pid esteja configurado corretamente no /opt/nginx/conf/nginx.conf, conforme exemplo a baixo:

pid /var/run/nginx.pid;
Padrão
Programação

Como matar baratas e desenvolver software

Estava lendo alguns artigos sobre Java, mais precisamente sobre desenvolvimento Java pra Web e comecei a pensar na seguinte situação:

Vamos imaginar que você está em uma empresa que desenvolve softwares. Mais precisamente em uma apresentação para um cliente onde várias pessoas estão por perto. Eis que aparece aquela indesejada Periplaneta americana (vulgo barata) pela sala.

Parando para pensar um pouco. Existem algumas diversas maneiras de se livrar da visita inoportuna. Vamos para a mais clássica, econômica e efetiva. Você vai até ela e pisa em cima dela.

Continuar lendo

Padrão
Desenvolvimento Web

Gracefull Degradation, Progressive Enhancement e Fluid Layout

Já faz um tempo que não escrevo sobre coisas relacionadas a programação/desenvolvimento, então vou fazer a minha recomendação sobre alguns artigos interessantes.

A algum tempo atrás era comum ouvir por ai que “Internet Explorer” era um mal necessário. Ninguém que desenvolvia gostava, mas quando chegava no contato com o cliente, ele podia nem saber direito pra que servia, mas estava esperneando se de alguma forma o seu site estivesse diferente (não estou nem cogitando a opção dele não funcionar direito, estamos falando de diferenças subjetivas, quase milimétricas). Continuar lendo

Padrão
Notícias, Programação

Lançado Netbeans 6.5

Acaba de ser lançado o Netbeans 6.5, próxima versão da IDE multi-linguagem da Sun.

Consolidando nesta versão, todos os recursos que não tinham sido migrados pra plataforma 6.x e que existiam na 5.5 e mais um monte de outras coisas.

Destaque desse lançamento vai também para um melhor suporte a Ruby e Ruby on Rails, suporte oficial para PHP e um Early Access (basicamente uma versão não terminada, mas razoavelmente estavel) para desenvolvimento em Python, que pode ser encontrado aqui.

A lista completa traduzida pode ser encontrada aqui (é o artigo sobre o lançamento da versão beta, mas tudo que tem lá tem aqui).

O artigo completo cubrindo o lançamento da nova versão vem em seguida. Aguardem :)

UPDATE: Faltou o link para o download.

Padrão
Programação

Características do Netbeans 6.5 Beta

O Beta do novo Netbeans, lançado no mês passado, cuja versão final deve sair dia 11 de Outubro, já trás a maioria dos recursos que estarão disponíveis.

Como toda versão em desenvolvimento do Netbeans, esta também é bastante usável e você encontrará poucos bugs, característica de um bom gerenciamento de projetos. Com os Milestones antigos foi assim, com essa versão Beta não será diferente.

O grande foco da 6.5 se deu em implementar um suporte melhor ao Glassfish v3, melhorar o suporte a Ruby e Ruby on Rails (e suas variantes escritas em Java: JRuby e JRuby on Rails), concluir a implantação do suporte ao PHP. Além claro das outras linguagens que ela da suporte, como o Java e a tecnologia Java EE, os carro chefes da IDE.

A lista completa das principais modificações (quase toda traduzida) você encontra a seguir:

Continuar lendo

Padrão
Geral, Programação, Software Livre

Netbeans vai ter suporte oficial a Python e Jython

Foi confirmado nesse ultimo dia 8, em uma noticia oficial no site do Netbeans que nas próximas versões da IDE, estará sendo incluído suporte a essas duas linguagens.

O anuncio havia sido feito pelos desenvolvedores Ted Leung (Dynamic Languages & Tools Architect) e Frank Wierzbicki (Jython Project Lead) ambos funcionários da Sun, no evento EuroPython 2008.

Uma curiosidade, é que o evento é patrocinado pela Canonical.

Padrão
Java, Notícias, Ruby On Rails

NetBeans 6.1 Lançado!

Foi lançado semana passada a versão final do NetBeans 6.1, disponível em diversos sabores, que prometem agradar profissionais de diversas linguagens e tecnologias.

A muito tempo o NetBeans vem se consolidando como uma opção ímpar pra desenvolvimento Java, ganhando em muitos aspectos do Eclipse. A quem diga que perde em outros, mas o número de itens já é bem menor, e diga-se de passagem, pouco significantes.

A maior deficiência da série 5.x foi corrigida na primeira versão da 6.0, que era relativo ao funcionamento do editor de código e ausência de diversos assistentes do mesmo, que são presentes em outras IDEs.

Já nessa release alguns outros pontos foram abordados, como uma melhora (considerável) no tempo de carregamento, na ordem de 40%. Melhor utilização de memória, suporte ao Rails 2.0, atualizações no Update Center, que está melhor que nunca.

Foi restaurado o suporte, presente no 5.5, a construção (com assistentes visuais) de JavaBeans, utilizando a estrutura da série 6.x da IDE.

Graças a compra da MySQL pela Sun, agora o NetBeans vem com integração já pronta para MySQL e mais uma infinidade de outras novidades que podem ser conferidas na nota de release oficial.

Só pra não deixar passar, o prometido suporte ao PHP, que deve sair de maneira completa na próxima versão, já está disponível de maneira incompleta em uma release preview no bom estilo tech-preview para os mais curiosos.

No balanço geral, classifico este release como um MUST HAVE, bem no estilo “Seus problemas acabaram“, e recomendo a atualização a todos. Eu mesmo já estou usando (e já estava, desde o lançamento da Beta).

Confira também um screencast do novo suporte a Javascript.

Padrão
Ruby On Rails, Software Livre, Tutoriais, Ubuntu

Netbeans 6.0 no Ubuntu com a beleza do TextMate

A proposta é bem simples, deixar o editor de códigos do Netbeans 6.0 com a mesma aparência do editor do TextMate, que é utilizado em todos os screencasts do Ruby on Rails.

Netbeans 6.0 Tema para Rails

Continuar lendo

Padrão