Como configuro o Apache com FastCGI e Ruby?

9

Eu tenho lido muitas postagens no fórum, tutoriais etc. sobre como configurar o apache no linux com o fastcgi. Estou tentando executar o fcgi para parte do meu desenvolvimento em ruby ​​(não rails), mas acho que deve ser aplicado a qualquer idioma. Observe que eu já tenho o apache, fastcgi, ruby-fcgi e similares já instalados na minha caixa da web.

Conceitualmente, estou tendo dificuldades com isso. O apache gera os processos fcgi especificados, conforme necessário? Eu os inicio ao lado do apache? Basicamente, estou tentando chegar a um ponto em que sou capaz de fazer as perguntas apropriadas, portanto peço desculpas se o título for enganoso.

sdellysse
fonte

Respostas:

9

Enquanto isso, eu percebi isso. Como não houve um resumo conciso sobre esse assunto, aqui está o começo de um. Quando eu tiver todos os erros resolvidos, enviarei isso para alguns sites de tutoriais.

  1. Certifique-se de que o módulo básico do fastcgi apache esteja instalado. Se você usa o ArchLinux como eu, mod_fcgid no aur funciona. Em outras distribuições, instale mod_fcgid ou mod_fastcgi. (Para aqueles que se perguntam a diferença, acho que não há muito, então fui para o que tem mais atividade.)

  2. No seu arquivo httpd.conf, ative o módulo adicionando uma linha ao início das suas definições do LoadModule. Não tenho certeza se importa quais distribuições, mas no Arch eraLoadmodule fcgid_module modules/mod_fcgid.so

  3. Adicione uma nova seção ao seu httpd.conf. Coloquei isso logo na seção cgid_module, mas tenho certeza de que a localização seria arbitrária.

    <IfModule fcgid_module>
      AddHandler fcgid-script .fgci
    </IfModule>
    
  4. Agora, pelo que entendi, qualquer arquivo com a extensão .fcgi em um diretório marcado ExecCGI agora será tratado pelo módulo fastcgi que foi instalado. Instalei este pacote para fornecer ao Ruby as ligações fastcgi, dentro de um diretório ExecCGI, e escrevi este script de testetest.rb.fcgi

    #!/usr/bin/ruby -w
    require 'fcgi'
    
    count = 0
    FCGI.each_cgi do
      puts "Content-type: text/html\n\n"
      puts "Hello, Ruby! FastCGI(#{count})"
      count = count + 1
    end
    

Agora, quando você countacessa essa página no seu navegador, já que está fora do loop fastcgi, ele deve aumentar a cada visualização da página. Nesse caso, o fcgi está configurado corretamente.

sdellysse
fonte
11
argh. markdown está me dando alguns problemas reais com este post.
precisa saber é o seguinte
Seu código foi incorporado em uma lista, portanto, o recuo de 4 espaços não é suficiente. Eu fiz isso funcionar com 8 espaços.
28510 Augustin
11
Interessante. Portanto, é possível lidar com arquivos .rb organizados com uma <Directory>diretiva em um <VirtualHost>contexto, digamos - AddHandler fcgi-script .rbe FCGIWrapper /path/to/ruby .rb(para remover o requisito de hashbang para scripts da web). E talvez Options ExecCGI. Pode dar uma chance.
Benji XVI
no ArchLinux, 'mod_fcgid' agora está disponível em extras, fora do AUR
Aaron Thomas
1

Você deve usar o Passenger para lidar com seu aplicativo de trilhos (mesmo se você não estiver usando nenhum recurso de trilhos, como ActiveRecord, etc.). Existem muitos sites em execução (além disso, eles têm o Rails Enterprise, menos memória, melhor desempenho)

Zepplock
fonte
Conforme especificado na pergunta, não estou usando trilhos. Mas obrigado de qualquer maneira.
Sdellysse
11
Para constar: O Phusion Passenger não executa apenas aplicativos Rails. Também suporta Rack. Portanto, se seu aplicativo da Web estiver usando o Rack, você pode tentar implantá-lo com o Phusion Passenger.
Joschi
1

O apache gera os processos fcgi especificados, conforme necessário? Eu os inicio ao lado do apache?

O Apache irá gerá-los para você. Você pode definir um número mínimo e máximo de processos para gerar no seu httpd.conf, e ele gerará novos e matará os antigos, com base no volume de solicitações recebidas. Desde que você receba solicitações, seu processo continuará em execução.

user44700
fonte
0

O Apache deve gerá-los usando a interface fastcgi. Isso os deixará em execução por algum tempo, no entanto, e espera-se que cada processo lide com mais de uma solicitação antes de terminar com o Apache.

Michael Graff
fonte