Rack은 Ruby로 웹 애플리케이션을 개발하기 위한 최소한의 모듈식 적응형 인터페이스를 제공합니다. 가능한 가장 간단한 방법으로 HTTP 요청과 응답을 래핑하여 웹 서버, 웹 프레임워크 및 웹 애플리케이션 간의 연결을 단일 메서드 호출로 통합하고 정제합니다.
이에 대한 정확한 세부 사항은 모든 Rack 응용 프로그램이 준수해야 하는 Rack 사양에 설명되어 있습니다.
버전 | 지원하다 |
---|---|
3.1.x | 버그 수정 및 보안 패치. |
3.0.x | 보안 패치만 해당됩니다. |
2.2.x | 보안 패치만 해당됩니다. |
<= 2.1.x | 지원이 종료됩니다. |
자세한 내용은 보안 정책을 참조하세요.
최신 버전의 Rack입니다. 여기에는 버그 수정 및 보안 패치가 포함되어 있습니다. 특정 변경 사항에 대한 자세한 내용은 변경 로그를 확인하세요.
이 랙 버전에는 업그레이드 가이드에 자세히 설명된 중요한 변경 사항이 포함되어 있습니다. 최신 기능과 보안 패치를 받으려면 가능한 한 빨리 랙 3으로 업그레이드하는 것이 좋습니다.
이 버전의 Rack은 보안 패치만 받고 있으므로 Rack 3으로 이동하려는 노력이 필요합니다.
Ruby 3.4부터 base64
종속성은 더 이상 기본 gem이 아니며 base64
누락에 대한 경고나 오류가 발생할 수 있습니다. 이 문제를 해결하려면 프로젝트에 base64
종속성으로 추가하세요.
애플리케이션 번들에 랙 gem을 추가하거나 지원되는 웹 프레임워크에서 제공하는 지침을 따르세요.
# Install it generally:
$ gem install rack
# or, add it to your current application gemfile:
$ bundle add rack
Rack::Session
또는 bin/rackup
의 기능이 필요한 경우 해당 gem을 별도로 추가하세요.
$ gem install rack-session rackup
다음 내용으로 config.ru
라는 파일을 만듭니다.
run do | env |
[ 200 , { } , [ "Hello World" ] ]
end
Rackup Gem 또는 지원되는 다른 웹 서버를 사용하여 이를 실행하세요.
$ gem install rackup
$ rackup
# In another shell:
$ curl http://localhost:9292
Hello World
랙은 다음을 포함한 다양한 서버에서 지원됩니다.
어떤 기능과 제한 사항이 있는지 알아보려면 서버 설명서를 참조해야 합니다. 일반적으로 유효한 Rack 앱은 아무것도 변경하지 않고 모든 서버에서 동일하게 실행됩니다.
Rack은 WEBRick
, Puma
, Falcon
등을 포함하는 지원되는 서버에서 Rack 애플리케이션을 실행하기 위한 일반 인터페이스인 별도의 gem인 Rackup을 제공합니다.
이러한 프레임워크와 기타 여러 프레임워크는 랙 사양을 지원합니다.
서버와 프레임워크 사이에서 Rack은 미들웨어를 사용하여 애플리케이션 요구 사항에 맞게 사용자 정의할 수 있습니다. 랙 자체에는 다음 미들웨어가 함께 제공됩니다.
Rack::CommonLogger
.Rack::ConditionalGet
입니다.Rack::Config
.content-length
헤더를 설정하는 Rack::ContentLength
.content-type
헤더를 설정하기 위한 Rack::ContentType
.Rack::Deflater
.etag
헤더를 설정하기 위한 Rack::ETag
.Rack::Events
.Rack::Files
.Rack::Head
HEAD 요청에 대해 빈 본문을 반환합니다.Rack::Lint
Rack 사양에 대한 적합성을 확인하기 위한 것입니다.Rack::Lock
.Rack::MethodOverride
.Rack::Recursive
애플리케이션에 다른 경로의 데이터를 포함하고 내부 리디렉션을 수행하기 위한 것입니다.Rack::Reloader
.Rack::Runtime
입니다.Rack::Sendfile
파일 시스템 경로에 대해 최적화된 파일 제공을 사용할 수 있는 웹 서버 작업을 위한 것입니다.Rack::ShowException
처리되지 않은 예외를 포착하고 클릭 가능한 역추적을 통해 훌륭하고 유용한 방식으로 표시합니다.Rack::ShowStatus
.Rack::Static
정적 파일을 더욱 구성 가능하게 제공합니다.Rack::TempfileReaper
.이러한 모든 구성 요소는 랙 사양에 자세히 설명된 동일한 인터페이스를 사용합니다. 이러한 선택적 구성 요소는 원하는 방식으로 사용할 수 있습니다.
기존 프레임워크 외부에서 개발하거나, 자체 프레임워크를 구현하거나, 미들웨어를 개발하려는 경우, Rack은 동일한 웹 작업을 수행하지 않고도 신속하게 Rack 응용 프로그램을 만들 수 있도록 많은 도우미를 제공합니다.
Rack::Request
는 쿼리 문자열 구문 분석 및 멀티파트 처리도 제공합니다.Rack::Response
편리한 HTTP 응답 생성 및 쿠키 처리를 위한 것입니다.Rack::MockRequest
및 Rack::MockResponse
.Rack::Cascade
.Rack::Directory
.Rack::MediaType
.Rack::Mime
파일 확장자를 기반으로 컨텐츠 유형을 결정합니다.Rack::RewindableInput
.Rack::URLMap
동일한 프로세스 내의 여러 애플리케이션으로 라우팅합니다. Rack은 구현의 다양한 기능을 제어하기 위해 여러 구성 매개변수를 노출합니다.
param_depth_limit
Rack :: Utils . param_depth_limit = 32 # default
매개변수에 허용되는 최대 중첩 양입니다. 예를 들어 3으로 설정하면 다음 쿼리 문자열이 허용됩니다.
?a[b][c]=d
하지만 이 쿼리 문자열은 허용되지 않습니다.
?a[b][c][d]=e
깊이를 제한하면 매개변수를 구문 분석할 때 발생할 수 있는 스택 오버플로를 방지할 수 있습니다.
multipart_file_limit
Rack :: Utils . multipart_file_limit = 128 # default
요청에 포함될 수 있는 파일 이름의 최대 부분 수입니다. 너무 많은 부분을 수락하면 서버에 파일 핸들이 부족해질 수 있습니다.
기본값은 128입니다. 이는 단일 요청으로 한 번에 128개 이상의 파일을 업로드할 수 없음을 의미합니다. 0으로 설정하면 제한이 없습니다.
RACK_MULTIPART_FILE_LIMIT
환경 변수를 통해 설정할 수도 있습니다.
(호환성을 위해 multipart_part_limit
및 RACK_MULTIPART_PART_LIMIT
라고도 합니다.)
multipart_total_part_limit
파일 및 비파일 양식 필드를 모두 포함하여 요청에 포함할 수 있는 모든 유형의 최대 부분 수입니다.
기본값은 4096입니다. 이는 단일 요청에 4096개 이상의 부분이 포함될 수 없음을 의미합니다.
0으로 설정하면 제한이 없습니다.
RACK_MULTIPART_TOTAL_PART_LIMIT
환경 변수를 통해 설정할 수도 있습니다.
CHANGELOG.md를 참조하세요.
Rack에 기여하는 방법에 대한 자세한 내용은 CONTRIBUTING.md를 참조하세요.
GitHub 문제에 버그, 제안, 패치를 게시해 주세요.
책임 있는 공개 및 보안 버그 보고 프로세스에 대해서는 보안 정책을 확인하세요. 라이브러리의 광범위한 사용으로 인해 공개 시점에 실행 가능한 패치를 제공하기 위해 시기를 관리하는 것이 좋습니다. 이 문제에 대한 귀하의 도움에 진심으로 감사드립니다.
rackup
스크립팅 서버용 Rackup::Server
(이전의 Rack::Server
)를 포함하여 명령줄에서 Rack 응용 프로그램을 실행하는 데 유용한 도구입니다.
rack-contrib
유용한 미들웨어가 너무 많기 때문에 새로운 Rack 미들웨어를 수집하는 프로젝트가 필요했습니다. rack-contrib
에는 Rack을 위한 다양한 추가 구성 요소가 포함되어 있으며 새 모듈을 쉽게 제공할 수 있습니다.
rack-session
Rack에 편리한 세션 관리를 제공합니다.
Rack Core Team은 다음과 같이 구성되어 있습니다.
그리고 랙 졸업생
감사드립니다:
Rack::Deflater
제작.Rack::ContentType
관련 브라이언 캔들러(Brian Candler)Rack::Response
인터페이스를 제안한 Gary Wright.Rack::Response
관련 개선을 위해 Jonathan Buch님.Rack은 MIT 라이센스에 따라 출시됩니다.