Fala galera! Depois de um tempo sumido, estou voltando a escrever! Vamos lá então que já estou atrasado!
Recentemente precisei configurar meu servidor de modo que rodasse o passenger com várias versões do ruby. Achei um post muito bacana sobre o assunto, foi nele que me baseei para conseguir colocar tudo para funcionar e nele que me basearei para escrever esse post aqui também.
Irei utilizar nginx neste post, mas caso você queira usar o apache, visite o post original abaixo.
http://blog.phusion.nl/2010/09/21/phusion-passenger-running-multiple-ruby-versions/
Estratégia, em grego strateegia, em latim strategi, em francês stratégie..
Nossa estratégia será a seguinte:
Com sudo
Instalar o rvm:
bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
Configurar o /etc/profile, adicionando ao final:
if [ -s "$HOME/.rvm/scripts/rvm" ] ; then
. "$HOME/.rvm/scripts/rvm"
elif [ -s "/usr/local/rvm/scripts/rvm" ] ; then
. "/usr/local/rvm/scripts/rvm"
fi
Esse grupo será criado para que o mesmo tenha permissão na pasta do rvm:
addgroup rvm
Aqui adicionaremos os usuários(projetos) que utilizaram o rvm:
usermod -aG rvm projeto1
Com as permissões abaixo, qualquer usuário que estiver no grupo rvm poderá utilizar normalmente o rvm.
chown -R root:rvm /usr/local/rvm
chmod -R g+w /usr/local/rvm
Vamos escolher versão do ruby que será mais utilizada, como exemplo usarei a 1.8.7. Então, vamos a instalação:
rvm install 1.8.7
Precisamos instalar e configurar o passenger com nginx agora:
gem install passenger --pre
passenger-install-nginx-module
Vamos editar o arquivo /opt/nginx/conf/nginx.conf para configurar nossas aplicações:
Note que podemos ter vários aplicativos rodando sobre o ruby 1.8.7. Não esqueça de adicionar cada projeto ao grupo rvm.
server {
listen 80;
server_name projeto1.com.br www.projeto1.com.br;
root /home/projeto1/current;
passenger_enabled on;
}
server {
listen 80;
server_name projeto2.com.br www.projeto2.com.br;
root /home/projeto2/current;
passenger_enabled on;
}
Agora vamos instalar o ruby 1.9.2:
rvm install 1.9.2
Mais uma vez iremos editar o arquivo /opt/nginx/conf/nginx.conf para adicionar nossas aplicações rodando em ruby 1.9.2:
Repare que aqui usaremos um proxy reverso, direcionando nossa aplicação da porta 80 para uma instancia do passenger aberta em modo standalone na porta 3000 e a outra para a 3001.
server {
listen 80;
server_name projeto3.com.br www.projeto3.com.br;
root /home/projeto3/current;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
}
}
server {
listen 80;
server_name projeto4.com.br www.projeto4.com.br;
root /home/projeto4/current;
location / {
proxy_pass http://127.0.0.1:3001;
proxy_set_header Host $host;
}
}
Sem sudo
Precisamos agora iniciar o passenger em modo standalone em nossos projetos. Você pode criar uma gemset para cada projeto:
Repare no parâmetro -d no momento do start no passenger, ele servirá para deixar o passenger rodando em background. Caso precise parar o processo, basta executar passenger stop -p 3000.
cd /home/projeto3/current
rvm use 1.9.2@projeto3 --create
gem install passenger --pre
passenger start -a 127.0.0.1 -p 3000 -d
Lembre-se startar o passenger em portas diferentes em cada projeto que usar o proxy reverso.
Finalizando
Se você leu o post citado no início, verá que o autor menciona em utilizarmos Unix domain sockets ao invés de TCP socket para ganho de performance. Fiz um teste usando o Unix domain sockets e tive um problema de encode na minha aplicação. Como não quis perder tempo, voltei a usar o TCP socket mesmo e tudo voltou ao normal!
Bem, por hoje é só pessoal, espero que tenham gostado do post!
Abraços!
-
my9online liked this
-
petersonro02 liked this
-
catherineak140 liked this
-
hernandezwe liked this
-
swamui9 liked this
-
nickthejam liked this
-
mssql4406 liked this
-
diegoalvareznogueira posted this