【질문】 Ruby의 "Hello world"스크립트가 움직이지 않는다 (Apache 경유)

조사해 보았습니다만, 돌파구를 찾아낼 수 없기 때문에 아시는 분이 오시면 가르쳐 주세요.

사건


  • Vagrant (CentOS 6.5) + rbenv + ruby-build로 ruby ​​환경 구축
  • Apache2를 통해 브라우저에서 "Hello world"한 index.rb 파일을 보더라도 500 Internal Server Error가 나오고 작동하지 않습니다.

  • ruby index.rb 할 때 제대로 출력된다
  • 폴더나 파일에 대한 권한은 문제가 되지 않음(755)
  • perl은 아파치를 통해 보았지만 제대로 작동했습니다

  • index.rb
    #!/usr/bin/env ruby
    
    print "Content-Type: text/html\n\n";
    print "Hello World\n";
    

    Apache 오류 로그

    /var/log/httpd/error_log
    [Sun Feb 16 12:44:35 2014] [error] [client 192.168.33.1] /usr/bin/env:
    [Sun Feb 16 12:44:35 2014] [error] [client 192.168.33.1] ruby
    [Sun Feb 16 12:44:35 2014] [error] [client 192.168.33.1] : No such file or directory
    [Sun Feb 16 12:44:35 2014] [error] [client 192.168.33.1]
    [Sun Feb 16 12:44:35 2014] [error] [client 192.168.33.1] Premature end of script headers: index.rb
    

    조사 결과



    Apache의 에러 로그로 가서 보면, 1행째의 ruby에의 패스 기술이 원인의 모양. 가능한 원인은 다음과 같습니다.
  • 개행 코드가 LF가 아니고 CR+LF가 되어 있기 (위해)때문에, 동작하지 않는다.
  • 경로가 잘못되었습니다

  • 1은 LF라고 ​​확인할 수 있으므로 문제 없음(GNU nano로 작성).
    2가 아마도 문제 같지만 여러 경로를 시도해도 같은 상황입니다 (/usr/bin/ruby 또는/usr/local/bin/ruby도 시도했습니다)
    Options +ExecCGI
    AddHandler cgi-script .cgi
    AddHandler cgi-script .pl
    AddHandler cgi-script .rb
    
    # .bash_profile
    
    # User specific environment and startup programs
    export PATH="/usr/local/rbenv/bin:$PATH:$HOME:/usr/bin"
    eval "$(rbenv init -)"
    

    루비의 위치는 다음과 같습니다 (rbenv이므로 홈 디렉토리 이하). rbenv에 도입 된 Ruby의 경로 - 베타나 잡기장에 의하면, #!/usr/bin/env ruby 로 좋은 것 같습니다만··
    # which ruby
    ~/.rbenv/shims/ruby
    

    또한 Ruby는 다음을보고 설치했습니다 (명령 내용 포함)
    htp : // / b gh th ch. 이 m/bぉg/아 rゔぇs/10

    추가: 해결됨



    코멘트란에서 친절하게 가르쳐 주셔서 해결했습니다.

    우선 /etc/sysconfig/httpd 에 다음을 추가export PATH=/home/vagrant/.rbenv/shims:$PATH그리고 재부팅 ( sudo service httpd restart )

    그런 다음 Apache가 홈 디렉토리에 액세스 할 수 있도록합니다.sudo chmod a+rx /home/vagrant
    이것으로 해결했습니다.

    좋은 웹페이지 즐겨찾기