
Rack fornece uma interface mínima, modular e adaptável para o desenvolvimento de aplicações web em Ruby. Ao agrupar solicitações e respostas HTTP da maneira mais simples possível, ele unifica e destila a ponte entre servidores web, estruturas web e aplicativos web em uma única chamada de método.
Os detalhes exatos disso estão descritos na Especificação do Rack, com a qual todas as aplicações de Rack devem estar em conformidade.
| Versão | Apoiar |
|---|---|
| 3.1.x | Correções de bugs e patches de segurança. |
| 3.0.x | Apenas patches de segurança. |
| 2.2.x | Apenas patches de segurança. |
| <= 2.1.x | Fim do suporte. |
Consulte a Política de Segurança para obter mais informações.
Esta é a versão mais recente do Rack. Ele contém correções de bugs e patches de segurança. Verifique o Registro de alterações para obter informações detalhadas sobre alterações específicas.
Esta versão do rack contém alterações significativas que são detalhadas no Guia de atualização. Recomenda-se atualizar para o Rack 3 o mais rápido possível para receber os recursos e patches de segurança mais recentes.
Esta versão do Rack está recebendo apenas patches de segurança e esforços devem ser feitos para migrar para o Rack 3.
A partir do Ruby 3.4, a dependência base64 não será mais uma gem padrão e pode causar um aviso ou erro sobre a falta de base64 . Para corrigir isso, adicione base64 como dependência ao seu projeto.
Adicione o rack gem ao seu pacote de aplicativos ou siga as instruções fornecidas por uma estrutura da web compatível:
# Install it generally:
$ gem install rack
# or, add it to your current application gemfile:
$ bundle add rack Se você precisar de recursos do Rack::Session ou bin/rackup adicione essas joias separadamente.
$ gem install rack-session rackup Crie um arquivo chamado config.ru com o seguinte conteúdo:
run do | env |
[ 200 , { } , [ "Hello World" ] ]
endExecute isso usando o gem rackup ou outro servidor web compatível.
$ gem install rackup
$ rackup
# In another shell:
$ curl http://localhost:9292
Hello WorldRack é suportado por uma ampla variedade de servidores, incluindo:
Você precisará consultar a documentação do servidor para descobrir quais recursos e limitações eles podem ter. Em geral, qualquer aplicativo Rack válido será executado da mesma forma em todos esses servidores, sem alterar nada.
Rack fornece um gem separado, rackup, que é uma interface genérica para executar um aplicativo Rack em servidores suportados, que incluem WEBRick , Puma , Falcon e outros.
Essas estruturas e muitas outras suportam a especificação Rack:
Entre o servidor e o framework, o Rack pode ser customizado de acordo com as necessidades de sua aplicação usando middleware. O próprio Rack vem com o seguinte middleware:
Rack::CommonLogger para criar arquivos de log no estilo Apache.Rack::ConditionalGet para retornar respostas Not Modified quando a resposta não foi alterada.Rack::Config para modificar o ambiente antes de processar a solicitação.Rack::ContentLength para definir um cabeçalho content-length com base no tamanho do corpo.Rack::ContentType para definir um cabeçalho content-type padrão para respostas.Rack::Deflater para compactar respostas com gzip.Rack::ETag para definir o cabeçalho etag em corpos que podem ser armazenados em buffer.Rack::Events para fornecer ganchos fáceis quando uma solicitação é recebida e quando a resposta é enviada.Rack::Files para servir arquivos estáticos.Rack::Head para retornar um corpo vazio para solicitações HEAD.Rack::Lint para verificar a conformidade com a especificação do rack.Rack::Lock para serializar solicitações usando um mutex.Rack::MethodOverride para modificar o método de solicitação com base em um parâmetro enviado.Rack::Recursive para incluir dados de outros caminhos na aplicação e para realizar redirecionamentos internos.Rack::Reloader para recarregar arquivos caso eles tenham sido modificados.Rack::Runtime para incluir um cabeçalho de resposta com o tempo necessário para processar a solicitação.Rack::Sendfile para trabalhar com servidores web que podem usar serviços de arquivos otimizados para caminhos de sistemas de arquivos.Rack::ShowException para capturar exceções não tratadas e apresentá-las de uma maneira agradável e útil com backtrace clicável.Rack::ShowStatus para usar boas páginas de erro para respostas de erro de cliente vazias.Rack::Static para um serviço mais configurável de arquivos estáticos.Rack::TempfileReaper para remover arquivos temporários criados durante uma solicitação.Todos esses componentes utilizam a mesma interface, descrita detalhadamente na Especificação do Rack. Esses componentes opcionais podem ser usados da maneira que você desejar.
Se você deseja desenvolver fora dos frameworks existentes, implementar seus próprios ou desenvolver middleware, o Rack fornece muitos ajudantes para criar aplicativos Rack rapidamente e sem fazer o mesmo material da web:
Rack::Request que também fornece análise de string de consulta e manipulação multipartes.Rack::Response para geração conveniente de respostas HTTP e manipulação de cookies.Rack::MockRequest e Rack::MockResponse para testes eficientes e rápidos de aplicativos Rack sem viagens de ida e volta HTTP reais.Rack::Cascade para tentar aplicativos Rack adicionais se um aplicativo retornar uma resposta não encontrada ou método não suportado.Rack::Directory para servir arquivos em um determinado diretório, com índices de diretório.Rack::MediaType para analisar cabeçalhos de tipo de conteúdo.Rack::Mime para determinar o tipo de conteúdo com base na extensão do arquivo.Rack::RewindableInput para tornar qualquer objeto IO rebobinável, usando um buffer de arquivo temporário.Rack::URLMap para rotear vários aplicativos dentro do mesmo processo. Rack expõe vários parâmetros de configuração para controlar vários recursos da implementação.
param_depth_limit Rack :: Utils . param_depth_limit = 32 # defaultA quantidade máxima de aninhamento permitida nos parâmetros. Por exemplo, se definido como 3, esta string de consulta seria permitida:
?a[b][c]=d
mas esta string de consulta não seria permitida:
?a[b][c][d]=e
Limitar a profundidade evita um possível estouro de pilha ao analisar parâmetros.
multipart_file_limit Rack :: Utils . multipart_file_limit = 128 # defaultO número máximo de partes com um nome de arquivo que uma solicitação pode conter. Aceitar muitas partes pode fazer com que o servidor fique sem identificadores de arquivo.
O padrão é 128, o que significa que uma única solicitação não pode carregar mais de 128 arquivos de uma só vez. Defina como 0 para não ter limite.
Também pode ser definido através da variável de ambiente RACK_MULTIPART_FILE_LIMIT .
(Isso também é conhecido como multipart_part_limit e RACK_MULTIPART_PART_LIMIT para compatibilidade)
multipart_total_part_limitO número total máximo de partes que uma solicitação pode conter de qualquer tipo, incluindo campos de formulário de arquivo e não-arquivo.
O padrão é 4.096, o que significa que uma única solicitação não pode conter mais de 4.096 partes.
Defina como 0 para não ter limite.
Também pode ser definido através da variável de ambiente RACK_MULTIPART_TOTAL_PART_LIMIT .
Consulte CHANGELOG.md.
Consulte CONTRIBUTING.md para obter detalhes específicos sobre como fazer uma contribuição para o Rack.
Publique bugs, sugestões e patches nos problemas do GitHub.
Por favor, verifique nossa Política de Segurança para divulgação responsável e processo de relatório de bugs de segurança. Devido ao amplo uso da biblioteca, é fortemente preferível que administremos o tempo para fornecer patches viáveis no momento da divulgação. Sua ajuda neste assunto é muito apreciada.
rackup Uma ferramenta útil para executar aplicativos Rack a partir da linha de comando, incluindo Rackup::Server (anteriormente Rack::Server ) para servidores de script.
rack-contrib A infinidade de middlewares úteis criou a necessidade de um projeto que coletasse novos middlewares Rack. rack-contrib inclui uma variedade de componentes complementares para Rack e é fácil contribuir com novos módulos.
rack-sessionFornece gerenciamento de sessão conveniente para Rack.
A equipe Rack Core, composta por
e os ex-alunos do Rack
gostaria de agradecer:
Rack::Deflater .Rack::ContentType .Rack::Response melhor.Rack::Response .Rack é lançado sob a licença MIT.