2013-05-22 1 views
0

첨부 파일 모델이 있고 레일 클립 3 보석을 사용하는 Rails 3 응용 프로그램이 있습니다. 개발 환경에서는 모든 것이 잘 작동하지만 프로덕션 서버에서는 업로드 된 이미지에 액세스 할 수 없습니다. 이미지는 그들이 있어야하는 위치의 오른쪽 폴더에 있지만 브라우저에서이 이미지에 도달하려고하면 단순히 404 페이지 만 얻습니다.레일/페이퍼 클립 - 업로드 된 이미지를 볼 수 없습니다.

업로드 폴더가 공용 폴더 아래에 위치하며이라고

"업로드"

내가이 액세스 할 수 있습니다 : "APP_URL/업로드/test.html를"나는 수동으로이

하지만이 작동하는지 확인하기 위해 만들어 내가 appclurup을 통해 응용 프로그램 내에 업로드 한 "app_url/uploads/test.jpg"에 액세스 할 수 없습니다.

나는 이것이 서버 구성과 관련이 있다고 생각하지만 나는 전문가가 아니며 도움이 필요할 수 있습니다.

감사

UPDATE는 파일을 업로드 난 그냥 깨달았다

는 "아무도"에 속하고 내가 수동으로 "루트"에 소유자를 변경할 때 잘 작동하는 것 같군. 그래서 Paperclip이 파일을 "루트"에 속하게 할 방법을 찾아야합니다.

+0

코드 예를 들어주십시오. – ferkulat

+0

업로드 된 파일이 "nobody"에 속해 있고 "root"로 수동으로 소유자를 변경하면 정상적으로 작동하는 것 같습니다. 그래서 Paperclip이 파일을 "루트"에 속하게 할 방법을 찾아야합니다 – umut

+0

Rails 응용 프로그램 서버는 어떤 사용자로 실행되고 있습니까? 어떤 사용자가 웹 서버를 실행하고 있습니까? 유효한 권한이없는 사용자 대신 루트를 통해 파일에 액세스하려는 이유는 무엇입니까? – jefflunt

답변

0

웹 응용 프로그램에서 파일을 루트로 쓸 수있는 것은 좋지 않습니다. 파일 사용 권한은 파일을 쓰는 프로세스에서 파생됩니다. 앱 시작시

http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerDefaultUser

는, 여객은 사용자가 해당 파일을 소유 알아보고, 그에게 응용 프로그램 프로세스의 전환을 시도 : 당신이 승객을 사용하는 경우, 사용자 전환의 개념이있다 사용자. 실패 할 경우 "nobody"가 기본값입니다.

파일 수준에서 응용 프로그램 사용 권한을 확인하십시오. 서버의 응용 프로그램마다 하나의 사용자 계정이 있어야합니다. 응용 프로그램 (공개 디렉토리 위의 디렉토리 및 내용)은이 사용자가 소유해야합니다. 공개 된 파일은 다른 사람들이 읽을 수 있어야하므로 웹 서버에서도 파일을 선택할 수 있습니다.

배포에 Capistrano를 사용하고 있습니까?

+0

config.ru & environment.rb는 루트가 소유하고 있으며 아무에게도 속하지 않았습니다. 그리고 나서 아파치와 어플리케이션을 재시작하여 파일 업로드를 시도했습니다. 업로드 된 파일은 이전과 같이 아무도 소유하지 않고 여전히 볼 수 없습니다. 브라우저에 수동으로 뿌리에 속하지 않는 한. 나는 카프리 스트라 노를 사용하지 않는다. – umut

+0

파일과 디렉토리가 루트가 아닌 권한이없는 사용자에게 속해 있어야합니다. 필자가 쓴 것처럼, Passenger는'config.ru' (Rack apps의 경우) 또는'config/environment '를 소유하고있는 응용 프로그램 프로세스에서 사용자를 선택합니다.rb' (Rails 앱용). – datenimperator

관련 문제