h1

Tutorial de instalação do Rails com Phusion Passenger (mod_rails) para Ubuntu

28-08-2008

Mais um dos milhares e milhares de tutoriais de como instalar, mas as vezes é muito dificil de encontrar um que mostre tudo junto.

Primeiramente deve-se instalar o Ruby  e os programas necessários:

sudo apt-get install gcc g++ build-essential zlib1g zlib1g-dev

sudo apt-get install -y ruby1.8 ri1.8 rdoc1.8 rake irb1.8
Deve-se criar os links simbólicos para os executaveis, com os comandos:
cd /usr/bin
sudo ln -s ruby1.8 ruby
sudo ln -s ri1.8 ri
sudo ln -s rdoc1.8 rdoc
sudo ln -s irb1.8  irb

Para verificar se foi realmente instalado corretamente veja se há retorno ao comando:
ruby -v
Agora deve-se instalar o gerenciador de pacotes para o ruby o RubyGems.
Para isso pode-se utilizar-se do comando:
sudo apt-get install rubygems
ou então baixar o pacote mais atual do site e instalá-lo, isso é mais recomendável de se fazer.
E pode ser feito de uma maneira automatizada com os comandos:

LINK=$(wget -qO - http://rubyforge.org/frs/?group_id=126 |grep "rubygems-" -m 1 | sed 's/.*href="//g'| sed 's/".*//g')
VERSION=$(echo $LINK | sed 's/.*rubygems-//g' | sed 's/.t.*//g')
wget http://rubyforge.org$LINK
ARQ=$(echo $LINK |sed 's/.*rubygems-//g' )
tar -xvzf rubygems-$ARQ
cd rubygems-$VERSION
sudo ruby setup.rb

cd /usr/bin
sudo ln -s gem1.8 gem

Para verificar se foi realmente instalado corretamente veja se há retorno ao comando:
gem -v

Com isso se tem todo o ruby pronto para produção, porém está faltando agora o Rails e o Passenger. Para instalar o rails utiliza-se do gerenciador de pacotes RubyGems com o seguinte comando:

sudo gem install rails

Para verificar se foi realmente instalado corretamente veja se há retorno ao comando:

rails -v

Instalação do Passenger
Agora deverá ser instalado algumas dependencias dele:

sudo apt-get install -y apache2-mpm-prefork apache2-prefork-dev libapr1-dev libopenssl-ruby libopenssl-ruby1.8 libssl-dev  libssl0.9.8 g++ ruby1.8-dev

E para então instalar o passenger com o RubyGems

sudo gem install passenger

Agora ele está instalado, porém ainda falta instalar o modulo dele do apache.
Deve-se definir duas constantes antes de iniciar a instalação do módulo, são elas HTTPD e APXS2, ulilizando o comando :
export HTTPD=/pasta/do/httpd
export APXS2=/pasta/do/apxs2

No Ubuntu 8.04 e provavelmente nas versões anteriores o httpd é chamado de apache2ctl, abaixo segue o comando com a pasta padrões já inseridas.
export HTTPD=/usr/sbin/apache2ctl
export APXS2=/usr/bin/apxs2

Após definir as constantes instale o modulo apache do passenger utilizando o comando:
sudo passenger-install-apache2-module
Agora o modulo apache do passenger     está instalado, faltando apenas a configuração final.
Abre-se  o arquivo apache.conf ou o http.conf, no Ubuntu esses arquivos ficam no diretório /etc/apache2, e como dica utilize o arquivo http.conf, pois este até então está vazio.
Insira as seguintes linhas no arquivo:
LoadModule passenger_module /pasta/do/ruby/gems/versao_do_rubygems/gems/passenger-versao_do_passenger_instalado/ext/apache2/mod_passenger.so
PassengerRoot /pasta/do/ruby/gems/versao_do_rubygems/gems/passenger-versao_do_passenger_instalado
PassengerRuby /pasta/do/executavel/ruby1.8

No caso do ubuntu as linhas ficaram:
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3
PassengerRuby /usr/bin/ruby1.8

Ainda no mesmo arquivo adicione  a seguinte linha:
RailsEnv MODO_DE_EXECUÇÃO
O MODO_DE_EXECUÇÃO deve ser subistituido por:

production  #Caso o aplicativo rails já será utilizado para produção
development #Caso o aplicativo ainda esteja em desenvolvimento

Agora faltam somente 2 passos para que sua aplicação rails possa funcionar perfeitamente.

Caso queira que o rails rode um subdiretorio do / do apache altere o arquivo sites-enabled/default do apache a seguinte linha dentro do virtualhosts:

RailsBaseURI /subdiretorio

E faça um link simbólico da pasta public da sua aplicação rails para a pasta / do apache em alguns casos ela fica no /var/www.
cd /pasta/do/root/do/apache
ln -s /pasta/da/sua/app/public subdiretorio

Salve o arquivo.
E finalizando, reinicie o apache com o comando:
sudo apache2ctl restart

E agora é só desenvolver suas aplicações em rails.

Agradeço pela visita, qualquer erro é só falar.

15 comentários

  1. Muito bom o artigo, parabéns pela ajuda…

    e abusando da boa vontade … (Preciso programar em Rails e não
    consigo nem instalar o ruby direito… ;-\)

    Após instalar o ruby 1.8.7 patch level 22 no ubuntu 8.04 hardy
    me occoreu o seguinte erro ao instalar a gem 1.2:

    xyz@xyz: /usr/local/src/rubygems-1.2.0$ sudo ruby setup.rb
    /lib/rubygems/spec_fetcher.rb:1:in `require’: no such file to load –
    zlib (LoadError)

    Primeiro instalei compilando os fontes:

    sudo apt-get install gcc g++ build-essential
    cd /usr/src
    sudo wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p22.tar.bz2
    sudo tar -jxvf ruby-1.8.7-p22.tar.bz2
    cd /ruby-1.8.7-p22
    sudo ./configure
    sudo make
    sudo make install

    ruby -v

    ruby 1.8.7 (2008-06-20 patchlevel 22) [i686-linux]) …ok

    cd /usr/src
    sudo wget http://rubyforge.org/frs/download.php/38646/rubygems-1.2.0.tgz
    sudo tar -zxvf rubygems-1.2.0.tgz
    cd rubygems-1.2.0
    sudo ruby setup.rb

    erro…

    Depois eu tentei instalar o ruby de diversas formas diferentes incluindo as
    bibliotecas libz também.

    sudo apt-get install ruby rdoc ri irb libyaml-ruby libzlib-ruby ri ruby1.8-dev

    sudo apt-get install ruby rubygems irb ri rdoc ruby1.8-dev build-essential

    sudo apt-get install -y ruby1.8 ri1.8 rdoc1.8 rake irb1.8

    A cada nova instalação do ruby eu tentei instalar o rubygems 1.2 direto
    dos fontes como fiz na primeira vez, então o mesmo erro ocorreu, daí refiz
    o processo de remoção e instalação dos pacotes novamente.

    Depois descobri que o meu Ruby está “desinstalável”….rsss

    Após tentar os comandos abaixo…

    sudo apt-get remove ruby libruby libruby1.8 ruby1.8 irb rdoc ri
    sudo aptitude remove ruby
    sudo dpkg –list | grep ruby, dpkg -r
    pelo Synaptic também removi as bibliotecas relacionadas

    .. e nada

    após um ruby -v

    ruby 1.8.7 (2008-06-20 patchlevel 22) [i686-linux]) !!!!

    Como eu posso resolver isto? Já enfrentou este problema?

    se vc puder me ajudar fico muito grato!

    Ruby sem gems não dá…rsssss

    Quero programar Rails no Ubuntu!
    Dizem que é fácil, mas como diria o capitão nascimento
    “quem disse que a vida é fácil”

    Obrigado pela atenção.

    Att.

    Bruno


  2. Respondendo a sua pergunta…
    O que ocorreu é que quando você compilou o ruby o zlib não estava instalado, para solucionar seu problema faça o seguinte.
    Verifique se os pacotes abaixo estão instalados:
    zlib1g,zlib1g-dev

    sudo apt-get install zlib1g zlib1g-dev

    Então, será preciso remover o ruby e compilar ele novamente, e no caso a remoção tem de ser manual.
    Ao contrario das outras versões ele não fica mais em /usr/lib/ruby … a versão 1.8.7 fica na pasta /usr/local/lib/ruby

    então rode o comando, sem medo

    sudo rm -rf /usr/local/lib/ruby

    e faça novamente o procedimento de compliação que você postou acima…Lembrando que você vai ter de extrair novamente os aquivos e compilar novamente.

    sudo tar -jxvf ruby-1.8.7-p22.tar.bz2
    cd /ruby-1.8.7-p22
    sudo ./configure
    sudo make
    sudo make install

    e depois

    sudo wget http://rubyforge.org/frs/download.php/38646/rubygems-1.2.0.tgz
    sudo tar -zxvf rubygems-1.2.0.tgz
    cd rubygems-1.2.0
    sudo ruby setup.rb

    Comigo funcionou…
    Espero ter ajudado


  3. Danilo, muito obrigado pela sua ajuda!

    Resolveu, perfeito!

    Te devo uma Erdinger!

    []’s


  4. [...] Probelmas com o ruby + openssl 28-10-2008 Hoje fui testar os passos que comentei em outro post que fiz no ubuntu 8.04, no ubuntu 8.10, pra verificar se estavam [...]


  5. valeu, funcionou perfect !


  6. Eu tentei seu tutorial em uma instalação zerada do Ubuntu Server 8.10.

    Só ficou faltando colocar aí um passo nas dependências; precisei instalar o build-essentials que era necessário para se gerar as extensões nativas que o passenger pedia :)

    Tirando isso, o resto foi tranquilo!

    Bom post, muito obrigado!


  7. Acabei esquecendo do build-essentials… vou atualizar
    valeu..


  8. Fiz todos os passos no ubuntu 8.10 porem quando inicio a aplicação o passenger volta um erro:

    Error message:
    No such file or directory – /nonexistent

    Application root:
    /var/www/teste

    Backtrace:
    # File Line Location
    0 /usr/local/lib/site_ruby/1.8/rubygems.rb 723 in `initialize’
    1 /usr/local/lib/site_ruby/1.8/rubygems.rb 723 in `new’
    2 /usr/local/lib/site_ruby/1.8/rubygems.rb 723 in `set_paths’
    3 /usr/local/lib/site_ruby/1.8/rubygems.rb 719 in `each’
    4 /usr/local/lib/site_ruby/1.8/rubygems.rb 719 in `set_paths’
    5 /usr/local/lib/site_ruby/1.8/rubygems.rb 526 in `path’
    6 /usr/local/lib/site_ruby/1.8/rubygems/source_index.rb 66 in `installed_spec_directories’
    7 /usr/local/lib/site_ruby/1.8/rubygems/source_index.rb 56 in `from_installed_gems’
    8 /usr/local/lib/site_ruby/1.8/rubygems.rb 736 in `source_index’
    9 /usr/local/lib/site_ruby/1.8/rubygems.rb 140 in `activate’
    10 /usr/local/lib/site_ruby/1.8/rubygems.rb 49 in `gem’
    11 /usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/connection_adapters/abstract/connection_specification.rb 226 in `establish_connection’
    12 /usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/connection_adapters/abstract/connection_specification.rb 216 in `establish_connection’
    13 /usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/connection_adapters/abstract/connection_specification.rb 209 in `establish_connection’
    14 /usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/initializer.rb 332 in `initialize_database’
    15 /usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/initializer.rb 120 in `process’
    16 /usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/initializer.rb 93 in `send’
    17 /usr/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/initializer.rb 93 in `run’
    18 ./config/environment.rb 13
    19 /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb 31 in `gem_original_require’
    20 /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb 31 in `require’
    21 /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb 509 in `require’
    22 /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb 354 in `new_constants_in’
    23 /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb 509 in `require’
    24 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/railz/application_spawner.rb 254 in `preload_application’
    25 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/railz/application_spawner.rb 214 in `initialize_server’
    26 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/utils.rb 179 in `report_app_init_status’
    27 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/railz/application_spawner.rb 203 in `initialize_server’
    28 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/abstract_server.rb 166 in `start_synchronously’
    29 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/abstract_server.rb 135 in `start’
    30 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/abstract_server.rb 112 in `fork’
    31 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/abstract_server.rb 112 in `start’
    32 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/railz/application_spawner.rb 179 in `start’
    33 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/railz/framework_spawner.rb 270 in `handle_spawn_application’
    34 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/railz/framework_spawner.rb 263 in `synchronize’
    35 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/railz/framework_spawner.rb 263 in `handle_spawn_application’
    36 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/abstract_server.rb 317 in `__send__’
    37 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/abstract_server.rb 317 in `main_loop’
    38 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/abstract_server.rb 168 in `start_synchronously’
    39 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/abstract_server.rb 135 in `start’
    40 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/abstract_server.rb 112 in `fork’
    41 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/abstract_server.rb 112 in `start’
    42 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/railz/framework_spawner.rb 87 in `start’
    43 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/spawn_manager.rb 218 in `spawn_rails_application’
    44 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/spawn_manager.rb 213 in `synchronize’
    45 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/spawn_manager.rb 213 in `spawn_rails_application’
    46 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/spawn_manager.rb 122 in `spawn_application’
    47 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/spawn_manager.rb 247 in `handle_spawn_application’
    48 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/abstract_server.rb 317 in `__send__’
    49 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/abstract_server.rb 317 in `main_loop’
    50 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/lib/passenger/abstract_server.rb 168 in `start_synchronously’
    51 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.5/bin/passenger-spawn-server 46


  9. Olá
    Tente reiniciar o mod_rails, e o apache novamente.


  10. Uma coisa que pode ter originado isso…
    Caso você tenha esquecido do RailsEnv, caso tenha colocado tente colocar me modo de desenvolvimento ou produção pelo RAILS_ENV no enviroment.rb.


  11. Danilo!
    Descomentei a linha do enviroment.erb, e ja tinha colocado o RailsEnv no http.conf, porem continua dando o mesmo erro.
    Eu estou usando o ultima versao passenger 2.0.5 e e esta usando o 2.0.3, será que pode ser isso?
    Bem para fins de Exoscisação do problema e formatei a maquina coloquei o ubuntu 8.10 server e apos executei o seu tutorial novamente passo a passo, e no fim apareceu o mesmo erro! Ja estou ficando preocupado.
    Outro dia eu montei outro servidor e usei seu tutorial e funciono certinho.
    Porem nesse servidor o erro acima descrito persiste!!

    Bem aguardo ajuda, obrigado pela atenção


  12. Olá
    Pelo que verifiquei, o problema é que ele não está encontrando ou podendo ler uma pasta que está especificada no Gem.user_home
    Faça o seguinte abra o irb e digite as seguintes linhas:
    require “rubygems”
    Gem.user_home

    É para aparecer uma pasta, verifique se ela existe e as permissões dela.


  13. Parabéns pelo Post, meu ajudou muito!


  14. [...] possuir o passenger já funcionando em sua maquina (caso não tenha instalado ainda veja este tutorial), e obviamente ter o webmin instalado. Crie um o arquivo vazio chamado rails.conf na pasta [...]


  15. [...] + GTK. Primeiro é necessário ter instalado o Ruby ( caso não tenha ele instalado veja o tutorial Aqui ) e o [...]



Deixe um comentário