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" ] ]
end
Execute isso usando o gem rackup ou outro servidor web compatível.
$ gem install rackup
$ rackup
# In another shell:
$ curl http://localhost:9292
Hello World
Rack é 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 # default
A 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 # default
O 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_limit
O 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-session
Fornece 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.