Todo o problema de configurar um servidor de desenvolvimento para o meu aplicativo Ruby on Rails me confunde. Existem WEBrick, Mongrel, Passenger, Apache, Nginx e muitos mais, tenho certeza, e eu realmente não entendo os diferentes papéis que eles desempenham.
Comecei usando o WEBrick e agora uso o Mongrel para desenvolvimento. Esses servidores são independentes ou ficam na frente do Apache?
Eu li sobre o Passenger e realmente não entendo o que é, o site diz "facilita a implantação de aplicativos da web Ruby", substitui o Mongrel? É como o Capistrano, que também implementa aplicativos da web?
Tendo em mente que gostaria de testar o SSL, e acredito que isso não é suportado pelo mongrel, qual é a melhor configuração do servidor de desenvolvimento?
obrigado
fonte
Respostas:
A palavra "implantação" pode ter dois significados, dependendo do contexto. Você também está confundindo as funções do Apache / Nginx com as funções de outros componentes.
Nota histórica: Este artigo foi originalmente escrito em 6 de novembro de 2010, quando o ecossistema de servidores de aplicativos Ruby era limitado. Atualizei este artigo em 15 de março de 2013 com todas as atualizações mais recentes no ecossistema.
Disclaimer : Eu sou um dos autores do Phusion Passenger, um dos servidores de aplicativos.
Apache vs Nginx
Ambos são servidores web. Eles podem servir arquivos estáticos, mas - com os módulos corretos - também podem servir aplicativos dinâmicos da Web, como os escritos em PHP. O Apache é mais popular e possui mais recursos, o Nginx é menor e mais rápido e possui menos recursos.
Nem o Apache nem o Nginx podem fornecer aplicativos da Web Ruby prontos para o uso. Para isso, é necessário usar o Apache / Nginx em combinação com algum tipo de complemento, descrito mais adiante.
O Apache e o Nginx também podem atuar como proxies reversos, o que significa que eles podem receber uma solicitação HTTP recebida e encaminhá-la para outro servidor, que também fala HTTP. Quando esse servidor responder com uma resposta HTTP, o Apache / Nginx encaminhará a resposta de volta ao cliente; Você aprenderá mais tarde por que isso é relevante.
Mongrel e outros servidores de aplicativos de produção vs WEBrick
O Mongrel é um "servidor de aplicativos" do Ruby: Em termos concretos, isso significa que o Mongrel é um aplicativo que:
No entanto, Mongrel é bastante datado, hoje em dia não é mais mantido. Os servidores de aplicativos alternativos mais recentes são:
Vou abordá-los mais tarde e descrever como eles diferem um do outro e de Mongrel.
O WEBrick faz a mesma coisa que Mongrel, mas as diferenças são:
O servidor de aplicativos e o mundo
Todos os servidores de aplicativos Ruby atuais falam HTTP, no entanto, alguns podem estar diretamente expostos à Internet na porta 80, enquanto outros não.
Por que alguns servidores de aplicativos devem ser colocados atrás de um proxy reverso?
Por que alguns servidores de aplicativos podem ser diretamente expostos à Internet?
Servidores de aplicativos comparados
Nesta seção, compararei a maioria dos servidores de aplicativos que mencionei, mas não o Phusion Passenger. O Phusion Passenger é um animal tão diferente do resto que eu lhe dei uma seção dedicada. Também omiti o Trinidad e o TorqueBox porque não os conheço o suficiente, mas eles são relevantes apenas se você usar o JRuby.
Phusion Passenger
O Phusion Passenger funciona de maneira muito diferente de todos os outros. O Phusion Passenger se integra diretamente ao Apache ou Nginx e, portanto, pode ser comparado ao mod_php do Apache. Assim como o mod_php permite que o Apache atenda a aplicativos PHP, quase que magicamente, o Phusion Passenger permite que o Apache (e também o Nginx!) Atenda a aplicativos Ruby, quase que magicamente. O objetivo do Phusion Passenger é tornar tudo o Just Work (tm) com o mínimo de problemas possível.
Em vez de iniciar um processo ou cluster para seu aplicativo e configurar o Apache / Nginx para servir arquivos estáticos e / ou solicitações de proxy reverso para o processo / cluster com o Phusion Passenger, você só precisa:
Toda a configuração é feita no arquivo de configuração do servidor da web. O Phusion Passenger automatiza praticamente tudo. Não há necessidade de iniciar um cluster e gerenciar processos. Iniciando / parando processos, reiniciando-os quando eles travam, etc. - todos automatizados. Comparado a outros servidores de aplicativos, o Phusion Passenger possui muito menos peças móveis. Essa facilidade de uso é um dos principais motivos pelos quais as pessoas usam o Phusion Passenger.
Também diferente de outros servidores de aplicativos, o Phusion Passenger é escrito principalmente em C ++, tornando-o muito rápido.
Há também uma variante Enterprise do Phusion Passenger com ainda mais recursos, como reinicializações automáticas, suporte a multithreading, resistência a erros de implantação, etc.
Pelas razões acima, atualmente, o Phusion Passenger é o servidor de aplicativos Ruby mais popular, com mais de 150.000 sites, incluindo grandes como New York Times, Pixar, Airbnb, etc.
Phusion Passenger vs outros servidores de aplicativos
O Phusion Passenger oferece muito mais recursos e muitas vantagens sobre outros servidores de aplicativos, como:
As cargas de trabalho nas quais o Unicorn não é bom são:
O modelo de E / S híbrido no Phusion Passenger Enterprise 4 ou posterior o torna uma excelente opção para esse tipo de carga de trabalho.
Existem mais recursos e vantagens, mas a lista é realmente longa. Você deve consultar o manual abrangente do Phusion Passenger ( versão Apache , versão Nginx ) ou o site do Phusion Passenger para obter informações.
Modelos de simultaneidade de E / S
Um artigo foi publicado recentemente no blog Phusion sobre o ajuste ideal do número de processos e encadeamentos, dada a sua carga de trabalho. Consulte Ajustando as configurações de simultaneidade do Phusion Passenger .
Capistrano
Capistrano é algo completamente diferente. Em todas as seções anteriores, "implantação" refere-se ao ato de iniciar seu aplicativo Ruby em um servidor de aplicativos, para que ele se torne acessível aos visitantes, mas antes que isso aconteça, normalmente é necessário fazer algum trabalho de preparação, como:
No contexto de Capistrano, "implantação" refere-se a fazer todo esse trabalho de preparação. Capistrano não é um servidor de aplicativos. Em vez disso, é uma ferramenta para automatizar todo esse trabalho de preparação. Você diz ao Capistrano onde está o servidor e quais comandos precisam ser executados toda vez que você implantar uma nova versão do seu aplicativo, e o Capistrano se encarregará de carregar o aplicativo Rails no servidor e executar os comandos que você especificou.
O Capistrano é sempre usado em combinação com um servidor de aplicativos. Não substitui servidores de aplicativos. Vice-versa, os servidores de aplicativos não substituem o Capistrano, eles podem ser usados em combinação com o Capistrano.
Claro que você não precisa usar o Capistrano. Se você preferir carregar seu aplicativo Ruby com FTP e executar manualmente as mesmas etapas de comandos todas as vezes, poderá fazer isso. Outras pessoas se cansaram, e automatizaram essas etapas em Capistrano.
fonte