4

프로덕션 서버에 nginx -> unicorn -> rails가 있습니다. 자산을 사전 처리 컴파일하면 파일 이름에 지문 (해시)이 추가 된 자산이 공개/자산에 저장됩니다. 그러나 웹 페이지가 요청되면 application.css 및 application.js 자산에 대한 참조가 잘못된 지문을 갖게됩니다. 예를 들어 레일즈 도우미 stylesheet_link_tag는 요청 된 지문이 미리 컴파일 된 것과 일치하지 않기 때문에 서버의 public/assets에없는 파일 이름을 생성합니다. 이미지 애셋이 잘 작동합니다 (지문이 일치 함).유니콘이 서비스를 제공 할 때 레일이 미리 컴파일 된 자산에 대해 잘못된 지문을 생성합니다.

문제를 해결하기 위해 내 로컬 컴퓨터에서 자산을 미리 컴파일했고 지문은 내 서버의 미리 컴파일 된 지문과 일치합니다. 또한 생산 모드에서 webrick을 사용하여 로컬로 실행하면 모든 것이 작동합니다. 그런 다음 서버에서 webrick을 실행 해 보았습니다. 유니콘이 문제의 원인이라고 생각하게 만들었습니다.

--no-default-middleware (또는 -N) 옵션을 사용하여 unicorn을 시작하여이 문제를 해결했으며, 이로 인해 사전 컴파일 된 자산에 대해 유니콘이 예상대로 작동합니다. 나의 이해는 유니콘이 그렇지 않으면로드 할 기본 랙 세트를로드하지 않도록 지시한다는 것입니다. 그러나, 이것이 왜 문제를 해결하는지, 또는 무엇이 잘못 되었는지를 나는 정말로 이해하지 못한다. 무슨 일 이니?

일부 세부 사항 : 우분투 12.04는 타사을 테마로, 루비 2.1.0, 부트 스트랩 3.0 4.0.1 레일

업데이트 :

나는 이것을 믿지 않는 이유는 인 nginx 문제는 브라우저에서 페이지를 요청한 다음 소스를 볼 때 application.css 파일의 파일 이름에 지문이 있기 때문에 실제로 application-3855b1928b94aa5bff5e1dac1aa56882.css처럼 보입니다. 이것은 내 서버에있는 파일의 실제 지문과 일치하지 않습니다. 로컬 개발 컴퓨터에서 동일한 지문을 얻으므로 서버의 지문이 맞다고 확신합니다. 클라이언트가 웹 페이지를로드 한 다음 서버에 .css 파일을 요청하는 중 ... nginx가 요청을 수신하지만 실제로 없기 때문에 .css 파일을 찾을 수 없습니다. 따라서 nginx는 예상대로 작동합니다. .

지문이 두 번 생성됩니다. 올바르게 작동하고 (확실하게) 작동하는 자산을 사전 컴파일하고 유니콘 관련없이 발생합니다. 그리고 두 번째로 유니콘 작업자의 컨텍스트에서 레일즈가 stylesheet_link_tag 도우미를보고 온 - 더 - 플라이 (on-the-fly)가 지문을 계산할 때 (나는 이것이 무엇을하는지 생각합니다), 이는 잘못된 지문을 생성하고 있습니다. 유니콘을 똑같은 서버에서 webrick으로 바꾸면이 같은 과정이 발생하지만이 경우 지문이 일치합니다. 유니 플래그를 -N 플래그로 시작하면 지문이 일치하지만 왜 이것이 차이가 나는지 알지 못합니다. 왜 아무도이 작업을 수행하지 않는 이유를 모르겠습니다.

+0

자산을 처리하는 특정 랙 미들웨어가 있습니까? – nicohvi

+0

@ Nicolay - Rails가 기본적으로 제공하는 것만. 비표준 보석은 줄무늬, twilio-ruby, aws-s3, pg, zip 및 unicorn입니다. –

+0

서버에서 사전 컴파일을 수행 중이거나 로컬에서 manifest를 업로드하고 있습니까? – nicohvi

답변

0

야생 추측 : 실제로 유니콘이 실제 서버 환경에서 실행되는지 확인하십시오.

-1

우리는 자산 컴파일이 성공했지만 상황이 예상대로 작동하지 않는 동일한 문제에 직면했습니다. 우리는 유니콘이 주요 원인이라고 여기에서 발견했습니다. 귀하의 경우와 마찬가지로 자산을 컴파일 한 후에도 유니콘을 다시 시작했습니다. 유니콘이 다시 시작되면 작업 프로세스 만 다시 시작되고 마스터 프로세스는 다시 시작되지 않습니다. 이것이 올바른 자산이 제공되지 않는 주된 이유입니다. 나중에 자산을 컴파일 한 후에 유니콘을 중지하고 시작하여 유니콘 마스터 프로세스가 다시 시작되고 올바른 자산이 제공되도록했습니다. 유니콘을 중지하고 시작하면 유니콘을 다시 시작하는 것과 비교할 때 작동 중지 시간이 약 10 초가됩니다. 이것은 장기 해결책으로서 유니콘에서 퓨마로 이동하는 경우 사용할 수있는 해결 방법입니다.