Lighttpd 와 RoR 설치 설정 의 난해 한 해답

더 읽 기
이전에 Linux 플랫폼 에 Ruby on Rails 를 설치 하고 배치 하 는 상세 한 설명 을 쓴 적 이 있 는데 리 눅 스 의 보급 과 응용 정 도 를 과대 평가 한 것 일 수도 있 고 수많은 설치 와 배치 문제 가 저 에 게 쏟 아 져 나 왔 습 니 다.여기 서 집중 적 으로 어 려 운 해답 을 제공 합 니 다.
1. 도대체 내 가 Lighttpd 를 써 야 합 니까? 아니면 Nginx / Mongrel 을 써 야 합 니까?
현재 Nginx / Mongrel 의 배치 방식 이 점점 인 기 를 끌 고 있 습 니 다. 많은 사람들 이 Lighttpd / FastCGI 를 의심 하고 있 습 니 다. 그리고 지금 은 Mongrel 보다 성능 이 좋 은 Thin, ebb 등 ruby 응용 서버 도 생 겨 났 습 니 다. 그러면 Lighttpd / FastCGI 는 정말 시대 에 뒤떨어 졌 습 니까?
관심 이 있 으 시 면 제 글 을 보 세 요. RoR 배치 방안 에 대한 심도 있 는 분석, Lighttpd 는 다른 웹 서버 가 가지 지 못 한 장점 을 많이 제공 하여 FastCGI 의 성능 을 최대 화 할 수 있 습 니 다.현재 Mongrel / thin / ebb 는 다 중 스 레 드 나 이벤트 IO 체 제 를 이용 하여 병행 성능 을 제공 합 니 다. 이것 은 FastCGI 가 갖 추 지 못 한 것 이지 만 안 타 깝 게 도 Rails 프레임 워 크 는 단일 스 레 드 이 고 최종 적 으로 단일 프로 세 스 단일 스 레 드 로 Rails 요 구 를 수행 해 야 하기 때문에 이러한 병행 우 위 는 쓸모 가 없습니다.그러나 일부 Ruby 의 웹 프레임 워 크, 예 를 들 어 camping, weavers 는 ruby 다 중 스 레 드 를 지원 하기 시 작 했 고 Rails 보다 훨씬 좋 은 성능 을 제공 했다. Mongrel / ebb 는 이러한 웹 프레임 워 크 에서 만 성능 우 위 를 발휘 할 수 있다.
그래서 레일 스 프레임 워 크 만 사용 하면 Lighttpd / FastCGI 는 성능 이 가장 좋 은 배치 방안 입 니 다.
2. ubuntu Linux 설치 ruby 에 부 딪 힌 readline, zlib 라 이브 러 리 부족 문제?
어떤 사람들의 ubuntu 가 설치 한 라 이브 러 리 가 완전 하지 않 습 니 다. 예 를 들 어 readline 라 이브 러 리 가 부족 하고 zlib 라 이브 러 리 가 부족 하면 루비 를 수 동 으로 컴 파일 하여 설치 하 는 데 실패 할 수 있 습 니 다. 그러면 apt - get 으로 라 이브 러 리 를 먼저 설치 하 십시오.
3. Lighttpd 설치 에 발생 한 pcre 라 이브 러 리 부족 문제?
RHEL / CentOS 사용 자 는 yum 으로 pcre / pcre - devel 라 이브 러 리 를 설치 해 야 할 수도 있 습 니 다. ubuntu 사용 자 는 apt - get 으로 설치 하고 Linux 숙련 자 도 소스 코드 를 다운로드 하여 컴 파일 하여 설치 할 수 있 습 니 다. Pcre 는 Perl 호 환 되 는 정규 표현 식 라 이브 러 리 입 니 다. Lighttpd 의 Rewrite 기능 이 필요 합 니 다.
4. Lighttpd 설정 과정 에서 발생 하 는 여러 가지 문제?
1. 제 가 사용 하 는 것 은 ubuntu 입 니 다. 당신 이 말 한 제어 스 크 립 트 rc. lighttpd 는 도망 갈 수 없습니다. 실행 하면 오류 가 발생 합 니 다.
리 눅 스 가 ubuntu 라면 시작 스 크 립 트 를 만들어 야 합 니 다. lighttpd 공식 위 키 에서 이 스 크 립 트 가 나 왔 습 니 다. 주 소 는 다음 과 같 습 니 다.
http://redmine.lighttpd.net/wiki/1/ScriptsUbuntu
rc. lighttpd 이 스 크 립 트 는 SuSE Linux 를 대상 으로 쓴 것 입 니 다. 또한 rc. lighttpd. redhat 는 RedHat Linux 를 대상 으로 쓴 것 입 니 다. 제어 스 크 립 트 를 직접 쓰 는 것 도 손 을 드 는 일 에 불과 합 니 다.

#!/bin/sh

case "$1" in 
  start)         
    /usr/local/lighttpd/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf > /dev/null 2>&1
    ;;
  stop) 
    killall lighttpd
    ;;
  restart) 
   $0 stop
   sleep 1
   $0 start 
   ;;
  *) 
  echo "Usage: lighttpd.sh {start|stop|restart}" 
  ;; 
esac

exit 0 

위 와 같은 셸 스 크 립 트 를 만 듭 니 다. chmod u + x lighttpd. sh. 이 스 크 립 트 는 lighttpd 를 닫 고 다시 시작 하 는 데 사용 할 수 있 습 니 다.
2. Lighttpd 를 시작 할 때 오류 가 발생 했 습 니 다. XXX 디 렉 터 리 를 찾 을 수 없다 고 합 니 다.
Lighttpd 가 시 작 된 후 기본적으로 access log, error log 를 씁 니 다. 압축 과정 을 시작 하면 압축 된 버 전 을 압축 디 렉 터 리 아래 에 두 기 때문에 lighttpd. conf 설정 파일 이 아직 없 거나 경로 가 맞지 않 는 지 확인 하 십시오.
3. lighttpd 를 시작 하면 접근 할 수 있 지만 Rails 를 설정 하면 시작 할 수 없습니다.
시작 할 수 없다 면 Lighttpd 의 error log 와 Rails 프로젝트 의 log 디 렉 터 리 아래 fastcgi crash log 를 보 는 것 을 배 워 야 합 니 다. 이 두 log 파일 에서 오류 원인 을 찾 을 수 있 습 니 다.그 중 하 나 는 레일 스 프로젝트 가 윈도 우즈 에서 창설 되 고 개발 되 며 마지막 에 리 눅 스 서버 에 배치 되 는 것 이다.이 경우 dispatch. fcgi 이 스 크 립 트 의 ruby 해상도 경 로 는 \ #!c: / ruby / bin / ruby. exe 이 경 로 는 Linux 에서 잘못된 것 이 분명 합 니 다. \ #! / 로 바 꿀 수 있 습 니 다.usr / bin / env ruby 또는 아예 Linux 에 이 Rails 프로젝트 를 만 듭 니 다.또한 windows 에 만 든 Rails 프로젝트, dispatch. fcgi 는 실행 가능 한 권한 이 없습니다. 이것 도 Linux 에서 실행 가능 한 권한 을 먼저 부여 해 야 합 니 다.이 스 크 립 트 cd Public &.. / dispatch. fcgi 를 수 동 으로 실행 해 보 세 요. 실행 가능 한 지 확인 하 세 요.
4. lighttpd 를 시작 하 는 중 오류 가 발생 했 습 니 다. socket 경 로 를 찾 을 수 없다 고 합 니 다.
제 가 앞에서 설치 한 문서 에서 보 여 준 설정 내용 은 다음 과 같 습 니 다.
$HTTP["host"] == "www.xxx.com" {
 server.document-root = "/yourrails/public"
 server.error-handler-404 = "/dispatch.fcgi"
 fastcgi.server = (".fcgi" =>
    ("localhost" =>
      ("min-procs" => 10,
       "max-procs" => 10,
       "socket" => "/tmp/lighttpd/socket/rails.socket",
       "bin-path" => "/yourrails/public/dispatch.fcgi",
       "bin-environment" => ("RAILS_ENV" => "production")
      )
    )
 )
}

그대로 베껴 도 경 로 를 바 꿀 거 죠?이 demo 의 socket 경 로 는 / tmp / lighttpd / socket / rails. socket 입 니 다. 그럼 복사 하 시 겠 습 니까? / tmp / lighttpd / socket 디 렉 터 리 가 항상 있 는 지 확인 하 시 겠 습 니까?사실 어떤 경 로 를 써 도 무방 하 다. 관건 은 그대로 베 끼 지 말고 원 리 를 이해 하고 자신의 환경 에 따라 상응하는 조정 을 하 는 것 이다.
5. lighttpd 를 시작 할 수 있 지만 Rails 응용 프로그램 에 접근 하 는 중 404 오류 가 발생 하여 페이지 를 찾 을 수 없습니다.
lighttpd 의 가상 도 메 인 설정 에 있 습 니 다.
 server.error-handler-404 = "/dispatch.fcgi"

lighttpd 에서 URL 에 대응 하 는 하 드 디스크 파일 을 찾 지 못 하면 Rails 의 dispatch. fcgi 를 호출 하여 URL 요청 을 처리 하 는 것 도 lighttpd 가 Rails 를 방문 하 는 주요 방식 으로 URL 전송 보다 성능 이 빠르다 는 뜻 이다.설정 파일 에서 이 줄 을 무시 하면 lighttpd 는 Rails 처리 가 아 닌 404 오 류 를 되 돌려 줍 니 다.
6. lighttpd 를 다시 시작 한 후에 fastcgi 프로 세 스 가 닫 히 지 않 아 lighttpd 를 여러 번 다시 시작 한 후에 fastcgi 프로 세 스 가 점점 더 쌓 입 니까?
정상 적 인 상황 에서 Lighttpd 를 닫 으 면 dispatch 프로 세 스 가 삭 제 됩 니 다. 그러나 dispatch 프로 세 스 가 요청 을 처리 할 때 lighttpd 를 닫 습 니 다. dispatch 프로 세 스 는 바로 닫 히 지 않 고 현재 요청 을 처리 해 야 닫 습 니 다.일부 극단 적 인 상황 에서 dispatch 프로 세 스 가 계속 닫 히 지 않 고 dispatch 프로 세 스 가 점점 많아 질 수 있 습 니 다.해결 방법 은 간단 합 니 다. killall - 9 dispatch. fcgi, 프로 세 스 만 죽 이면 됩 니 다.
7. 나의 lighttpd 와 FastCGI 는 서로 다른 서버 에 배치 되 어 있 습 니 다. 어떻게 설정 합 니까?
이 경우 Lighttpd 는 원 격 서버 에 연 결 된 TCP 포트 일 뿐 dispatch. fcgi 프로 세 스 를 시작 하 는 것 은 책임 지지 않 기 때문에 dispatch. fcgi 프로 세 스 를 닫 는 스 크 립 트 를 직접 작성 해 야 합 니 다.lighttpd 는 spawn - fcgi 프로그램 을 제공 합 니 다. dispatch. fcgi 프로 세 스 를 시작 하고 TCP 포트 를 감청 할 수 있 습 니 다. 셸 스 크 립 트 를 직접 써 서 이 작업 을 완성 할 수 있 습 니 다.또한 spawn - fcgi 는 dispatch. fcgi 프로 세 스 를 시작 하여 이 컴퓨터 의 유 닉 스 socket 포트 를 만 들 고 이 컴퓨터 의 lighttpd 와 통신 할 수 있 습 니 다. 예 를 들 어:
예 를 들 면:

#!/bin/sh

DISPATCH_PATH=/yourrailsapp/public/dispatch.fcgi
SOCKET_PATH=/tmp/lighttpd/socket
RAILS_ENV=production
export RAILS_ENV

case "$1" in

  start)
    for num in 0 1 2 3 4 5 6 7 8 9
    do
     /usr/local/lighttpd/bin/spawn-fcgi -f $DISPATCH_PATH -s $SOCKET_PATH/rails.socket-$num
    done
    ;;

  stop)
    killall -9 dispatch.fcgi
    ;;

  restart)
    $0 stop
    $0 start
    ;;
  
  *) 
    echo "Usage: dispatch.sh {start|stop|restart}"
    ;;
  
esac

exit 0

실행. / dispatch. sh start 는 dispatch. fcgi 프로 세 스 10 개 를 시작 합 니 다. / tmp / lighttpd / stock 디 렉 터 리 아래 유 닉 스 socket 파일 10 개 를 만 든 다음 lighttpd 를 설정 하여 10 개의 socket 파일 을 연결 합 니 다.
$HTTP["host"] =~ "www.xxx.com$" {
  server.document-root = "/yourrails/public"
  server.error-handler-404 = "/dispatch.fcgi"
  fastcgi.server = (".fcgi" =>
    (
      ("socket"=>"/tmp/lighttpd/socket/rails.socket-0"),
      ("socket"=>"/tmp/lighttpd/socket/rails.socket-1"),
      ("socket"=>"/tmp/lighttpd/socket/rails.socket-2"),
      ("socket"=>"/tmp/lighttpd/socket/rails.socket-3"),
      ("socket"=>"/tmp/lighttpd/socket/rails.socket-4"),
      ("socket"=>"/tmp/lighttpd/socket/rails.socket-5"),
      ("socket"=>"/tmp/lighttpd/socket/rails.socket-6"),
      ("socket"=>"/tmp/lighttpd/socket/rails.socket-7"),
      ("socket"=>"/tmp/lighttpd/socket/rails.socket-8"),
      ("socket"=>"/tmp/lighttpd/socket/rails.socket-9")     
    )
  )
}

이렇게 하면 매번 응용 프로그램 을 재배 치 할 때마다 lighttpd 를 다시 시작 할 필요 가 없고, 자신의 dispatch. sh 를 실행 해서 dispatch. fcgi 프로 세 스 를 다시 시작 하면 된다 는 장점 이 있다.또한 이전 fastcgi 프로 세 스 가 쌓 인 문 제 를 잘 해결 할 수 있 습 니 다.
원 격 배치 라면 설정 방식 이 같 습 니 다. lighttp 연결 포트 가 다음 으로 바 뀌 었 습 니 다.
("host"=>"192.168.0.1, "port"=>3001),
("host"=>"192.168.0.1, "port"=>3002),
......

dispatch. sh 가 dispatch. fcgi 프로 세 스 를 만 들 때 - t 매개 변 수 를 사용 하여 tcp 포트 를 만 듭 니 다. - s 가 아 닌 유 닉 스 socket 파일 을 만 들 면 됩 니 다.
8. 나의 rails 응용 프로그램 은 루트 디 렉 터 리 아래 가 아니 라 하위 디 렉 터 리 아래 에서 어떻게 설정 합 니까?
예 를 들 어 rails 응용 프로그램 은 특정한 사이트 의 하위 디 렉 터 리 를 사용 해 야 합 니 다. 예 를 들 어:http://www.xxx.com/myapp그러면 lighttpd 에 디 렉 터 리 별명 맵 을 추가 하면 됩 니 다. 예 를 들 어:
server.document-root = "/yourwebsite/myapp/public"
alias.url = ("/myapp" => "/yourwebsite/myapp/public") 

좋은 웹페이지 즐겨찾기