2012-06-21 1 views
0

나는 Thin, Sinatra 및 Bundler의 조합으로 놀고 있습니다. 로드 경로에 내 소스 코드의 경로를 포함시키는 방법을 씬에 알기 위해 노력하고 있습니까? 이 설치 프로그램에 대한 소개 자습서를 찾았지만 아무도 내 질문에 대답하지 않는 것 같습니다.씬 (thin)으로 호출 할 때로드 경로에서 루비 소스를 얻으려면 어떻게해야합니까?

랙 업 파일 또는 씬 (thin) 설정 파일로 주위를 조심하지 못합니다. 내가 좋아하는 뭔가 디렉토리 구조를 가지고 있다고 가정하십시오 rackup 파일의

bin/my-application-entry.rb # The entry point to my sinatra application 
lib/myapp/mylibs.rb 
thin/config.ru # rackup config 
thin/dev.yaml # thin config 
Gemfile  # for my dependencies 

내용은 내가가는이 걸리는 것으로 나타났습니다 내가

thin -C thin/dev.yaml -R thin/config.ru start 

와 응용 프로그램을 호출 할 본질적으로

require 'sinatra' 
# I'd like to require 'my-application-entry' around here somewhere (I think?) 
run Sinatra.application 

입니다 명령 줄 인수를 사용하여 특정 라이브러리가 필요하지만 모든로드 경로를 정의 할 수있는 더 나은 곳이 있습니까?

내 질문은 정말 어떻게 얇은/랙/bundler 포함 할 디렉터리를 말할합니까? (예 : bin/및 lib /)

편집 : 명확하게하기 위해 일반적으로 Thin을 사용하여 일반적으로 어떻게 수행되는지 알고 싶습니다. 주 응용 프로그램에서 $를 수정하는 것을 꺼려합니다. 그러나 $ :를 사용해야 만한다면, Thin/Rack/Sinatra 컨텍스트에서 가장 적합한 위치는 어디입니까?

답변

0

$ :는로드 경로를 설명하는 전역 변수이며 배열로 표시됩니다.

$:.unshift(".").uniq! 

아니면 목록의 끝에 밀어 수 있습니다 "."다음과 같이, 당신이 걱정이라면, 중복 제거, 추가 할 수 있습니다 그것은 종종 기본적으로 생략 것

$:.push(".").uniq! 

때문에 잠재적 인 보안상의 위험이 있습니다.

+2

로드 경로에 필요한 디렉토리를 추가하는 데 대한 기술적 인 세부 사항을 알고 있습니다. 내 질문은 디자인 관점에서 더 목표를 설정했습니다.이 작업을 수행 할 수있는 적절한 위치는 어디입니까? 일반적으로, 나는 더 좋은 방법이 없다면 소스 코드에서'$ :'를 불편하게 느낀다. 예를 들어, 내가 작성한 응용 프로그램에서 루비 프로세스가 실행되기 전에로드 경로가 설정되고'ruby -I'를 통해 전달됩니다. 나는 이것이 올바른 접근법이라고 말하지는 않지만,이 경우 애플리케이션에서 환경을 명확하게 분리 할 수 ​​있기 때문에 $를 망치는 것보다 깔끔합니다. – jabalsad

0

나는 똑같은 것을 궁금해. 내가하고있는 일을 말하고 그것을 정당화하려고 노력할 것이다. 아마도이 글을 쓰는 과정에서 뭔가를 알아 냈을 것입니다.

config.ru을 내 응용 프로그램의 진입 점으로 사용하고 있기 때문에 지금은 $LOAD_PATHconfig.ru을 추가하기로 결정했습니다. 프로젝트의 루트에이 파일을 남겨두기 때문에이 문제를 해결할 수 있습니다. 그 가정을하는 것을 좋아하지 않지만, 지금은 꽤 안전합니다. 물론, 나는이 파일이 응용 프로그램의 유일한 진입 점이며 항상 프로젝트의 루트에 있다고 가정합니다. "라고 말하면서 주석을 남깁니다. 나는 높은 가능한 호출 스택 (의존 관계 역전 원칙)에 $LOAD_PATH에 추가 할하지만 생산 thin를 실행하는 응용 프로그램 (Procfile을 실행 명령에 그렇게 때문에

나는이를 선택, 명령 줄 shotgun를 실행 개발 중)은로드 경로에 추가하려는 디렉토리를 복제합니다. 이 복제본을 필수 (제거 가치) 또는 우연 (복제 가치)으로 분류합니까? 지금은 앱이 여러 가지 서비스를 하나의 요청/응답/라우팅 엔진에 통합하기 때문에 적어도 앱을 구성하기로 결정했을 때 앱의 핵심 요소처럼 보입니다. 또한 config.ru은 앱을 설명하므로 앱으로 취급하는 것이 좋습니다.

상황이 변경되고 프로덕션 환경에서와 다른 $LOAD_PATH을 개발하려는 경우, 호출 스택 위로 디렉토리를 이동하여 config.ru 명령으로 실행합니다.

"나는 올바른 선택"이라고 생각하지 않기 때문에이 선택에 편안함을 느낍니다.하지만 어떻게 생각하건 내가 왜 마음을 바꿀 것인지를 생각하기 때문에. 나를 위해 충분하다.

이 정보가 도움이되기를 바랍니다.

관련 문제