3

현재 Heroku는 내 코드를 인스턴스에 적용 할 때 자산을 미리 컴파일 할 것으로 판단됩니다.Heroku가 개발 모드에서 사전 컴파일 된 자산을 사용하지 못하도록 함

프로덕션 서버에 적합하지만 "RAILS_ENV = development"서버의 경우 이로 인해 문제가 발생합니다. 이제 자산 애셋에서 개별적으로 제공되는 모든 JavaScript 파일이있는 페이지를 얻은 다음 동일한 코드는 모두 사전 컴파일 된 자산으로 그룹화됩니다.

이것은 내가 내 로컬 환경 (개발 또는 생산) 또는 내 생산 Heroku가 인스턴스로하지 않는 팝업 오류를 던지고, 내 JQuery와 datatables 라이브러리가 깨질.

어쨌든 개발 모드 인스턴스의 Heroku에서 에셋의 사전 컴파일을 비활성화 할 수 있습니까? 또는 이미 개발 Heroku 서버에서 이미 이러한 기능이 비활성화되지 않은 이유가 있습니까?

답변

2

Heroku가 public/assets/manifest.yml 파일을 감지하면 자산을 사전 컴파일하지 않고 자신을 직접 처리한다고 가정합니다. 자세한 내용은 http://devcenter.heroku.com/articles/rails31_heroku_cedar

+1

이것은 개발과 테스트에 대한 별도의 코드 세트를 가져야한다는 것을 의미합니다. 프로덕션, 나는 추측한다 (그렇지 않으면 프로덕션은 자산을 미리 컴파일하는 것을 멈출 것이다!) 팁을 주셔서 감사합니다. - 나를 일으켜 세울 수 있지만, 나는 다른 코드 세트를 가질 필요가없는 솔루션을 제공 할 수 있는지 궁금합니다./git branch for development heroku (예 : ENV 변수 또는 Ruby 환경 rb 스크립트 값 사용) – Phantomwhale

+0

앱에서 public/assets/manifest.yml이 발견되면 Heroku는 자신이 저작물을 처리하고 있다고 가정하고 자산을 컴파일하십시오. Rails 4에는 public/assets/manifest- .json이 대신 있어야합니다. 두 버전 모두에서 $ rake assets을 실행하여이 파일을 생성 할 수 있습니다. 로컬에서 사전 컴파일하고 결과 파일을 Git으로 검사합니다. –

0

AFAIK는 Heroku가 자신의 읽기 전용 FS와 레일 자산 파이프 라인이 FS 파일을 작성하고자하는 사실을 주위에 작업 할 자산을 미리 컴파일한다. 제가 제안 할 수있는 유일한 방법은 컴파일 될 때 자산이 왜 파괴되는지를 알아내는 것입니다.

+0

나는 그것이 두 번로드되고 있기 때문입니다. 일단 개발 모드 레일이 JS 매니페스트 파일을 분해하고 모든 개별 JS 링크를 페이지에 포함시킨 다음 다시 페이지가 모든 코드를 포함하는 미리 컴파일 된 JS 매니페스트를로드 할 때 다시로드합니다. 이것은 로컬 개발 머신 (미리 컴파일 된 자산이 전혀 없음) 또는 모든 프로덕션 환경 (모든 자산을 사전 컴파일해야 함)에서 발생하지 않습니다. – Phantomwhale

0

에서 나는 자산을 해제하는 내 Rakefile 일부 부두를 추가하여이 문제를 해결했다 : 사전 컴파일 레이크 작업을.

먼저 나는

heroku labs:enable user-env-compile 

다음

# found from http://blog.jayfields.com/2008/02/rake-task-overwriting.html 
# used by conditional heroku asset compile magick 
class Rake::Task 
    def overwrite(&block) 
    @actions.clear 
    enhance(&block) 
    end 
end 

가 그럼 난 lib 디렉토리/작업/disable_assets_on_heroku이 레이크 작업을 추가 내 Rakefile의 시작이 추가 사용자 ENV 컴파일 실험실 구성 요소를 추가 .rake

if ENV['RAILS_ENV'] == 'development' 
    namespace :assets do 
    task(:precompile).overwrite do 
     puts "Asset precompile skipped in #{ENV['RAILS_ENV']}" 
    end 
    end 
end