2011-09-02 2 views
8

저는 레일즈 3.1에 대해 잘 알고 있습니다. 이전 프로젝트를 업데이트하고 새로운 자산 파이프 라인이 개발 모드에서 프로덕션 모드로 어떻게 작동하는지 알아 내려고했습니다.생산 전에 레일스 자산 파이프 라인의 오류를 어떻게 잡습니까?

기본 config.assets.precompile 설정은 모든 것이 하나의 스타일 시트와 하나의 자바 스크립트 파일로 제공되어야한다는 목적으로 만 application.cssapplication.js을 축복. 우리가 원하지 않는, 그래서 우리는 그 설정 변수의 목록에 항목을 추가 할 수 있습니다 때

은 분명히 여기

내가 생산에 갈 때 내 샌드 프로젝트와 다 퉜다 상황이다 ... 상황이 있습니다 :

  1. 사이트를 탐색하면서 모든 것이 작동하고 있음을 확인했습니다. 애셋이 별도의 파일로 링크되었으며 사이트가 올바르게 표시되었습니다.
  2. 사이트를 내 서버에 업로드하고 프로덕션 환경에서 작동 시키려고했습니다. 첫 번째 오류는 "ie.css" (조건부 스타일 시트)이 사전 컴파일되지 않는다고 말합니다. (저는 Safari에 있었고이 스타일 시트는 다운로드되지 않았습니다. 페이지를 렌더링하기 전에 stylesheet_link_tag 도우미에서 오류가 발생했습니다.)
  3. Ran rake assets:precompile 그리고 다시 시도해보십시오.
  4. 위의 항목을 config.assets.precompile에 추가하고 다시 시도했습니다.
  5. 다른 자산 오류가 발생할 때까지 계단판 아래로 오류를 보냈습니다. 나는 모든 자산을 가지고 생각까지
  6. GOTO이 문제를 해결하는 방법을 알고하지

3. 나는 원에서 주위에 몇 번 가서 사이트는 생산에 렌더링되었다. 그럼 난 MSIE에서 시도하고 다른 오류 500 누르십시오 : "belated_png_fix.js" 조건부로로드되고 있었고 그때까지 자르지 않았다.

시행 착오 또는 통합 테스트에 대한 의존도가 아닌 제 질문은 자산 파이프 라인에서 일부 스타일 시트 또는 자바 스크립트가 추가되지 않았 음을 발견하면 내 사이트가 폭탄에 떨어지지 않을 것이라고 어떻게 예측할 수 있습니까? 프리 컴파일 목록에?

누락 된 스타일 시트 자산으로 인해 요청시 컴파일하거나 자산을 요청할 때 404 페이지를 제공하는 대신 전체 페이지의 오류가 500 번 발생하는 이유가 궁금합니다. 이것은 "일찍 실패"하는 의도적 인 설계입니까?

+0

최근에 오래된 앱을 자산 파이프 라인으로 변환했는데 문제가 없었습니다. 모든 것이 함께 작동하는 방법을 알아내는 데는 시간이 걸렸습니다. 질문에 대답하기 위해 css 및 js 파일의 내용, 특히 require 문을 표시 할 수 있습니까? 나는 또한 당신이보기에서 이들을 호출하는 방법에 관심이 있습니다. 마지막으로 그들은 모두 앱/자산에 있거나 lib/assets과 공급 업체/자산을 사용하고 있습니까? –

답변

1

레일 3.1에서도 비슷한 문제가있었습니다. 당신이 할 수있는 최선의 일은 카피 스트라 노 멀티 스테이지를 설치하고 스테이징 서버를 얻는 것입니다.

어떤 이유로 든이 작업을 수행 할 수없는 경우 컴퓨터에 가상 컴퓨터를 설치하고 서버 환경을 복제 해보십시오.

+0

예, 이미이 작업을 수행했습니다. "시행 착오"라는 제목 아래에 있습니다 (일부 통합 테스트에서는 확실히 자동화 될 수 있습니다 ... 아마도 더 좋은 방법은 없을 것입니다). –

0

이것은 과도 할 수도 있지만이 방법은 저에게 효과적입니다 (깨끗한 컴파일 된 애셋을 제공함). .bash_profile 파일에이 파일이 있습니다.

alias ggo='bundle exec rake assets:clean && bundle exec rake assets:precompile && git add . && git commit -m "precompile" && git push origin master && cap deploy' 

및 내 config/environments/production에 있습니다.RB (필요시 강제로 생산 컴파일, 나는 "GGO"먼저 실행하는 것을 잊지 경우에 필요 안) :

config.assets.compile = true 

그래서, 내 워크 플로우는 다음과 같습니다 1. 코드 2. 자식이 & 추가 git commit 3. CSS/SASS/JS/CoffeeScript 파일을 만진 경우 ggo를 실행합니다. 그렇지 않으면 정상적인 배포를 수행합니다.

+0

유용한 트릭이지만 문제는 사전 컴파일이 알고있는 항목에만 작용한다는 것입니다 약. 이 트릭은 다양한 관점에서 링크 된 리소스가 무엇인지 파악하고 목록에 추가되도록 보장합니다. –

1

연속 배포는 좋은 일이며, 매우 간단하여 어쨌든 실제로 그렇게 고통스럽지 않게해야합니다. 즉, config.assets.precompile은 정규식을 취할 수 있습니다. 최상위 톱니 모양의 "manifest"파일에 대한 표준 또는 번들로 제공되지 않는 표준 하위 폴더는 어떻게 작성합니까? (아직 실제로 시도한 것은 아니지만 ...)

2

개발자가 config.assets.precompile에 애셋을 추가하는 것을 잊지 않도록 보장하는 assets_precompile_enforcer이라는 보석을 출시했습니다. javascript_include_tag 또는 stylesheet_link_tag을 통해 저작물을 포함하고 config.assets.precompile의 필터와 일치하지 않는 경우 예외가 발생합니다.

즉, 프로덕션 환경에 배포 한 후에 자산 오류가 발견되는 대신 개발 중에 캐쉬됩니다.