복붙노트

[RUBY-ON-RAILS] 4 레일 : 자산 생산에로드되지

RUBY-ON-RAILS

4 레일 : 자산 생산에로드되지

나는 작동하지 않는 생산 및 이미지와 CSS의 자산 경로로 내 응용 프로그램을 넣어 노력하고있어.

여기에 내가 현재하고 있어요 무엇 :

내 사이트를 탐색 할 때, 나는 mysite.com/stylesheets/styles.css에 대한 404 찾을 수 없음 오류가 발생합니다.

내가 도대체 ​​뭘 잘못하고있는 겁니까?

최신 정보: 내 레이아웃, 그것은 다음과 같습니다 :

<%= stylesheet_link_tag    "bootstrap.min", media: "all", "data-turbolinks-track" => true %>
<%= stylesheet_link_tag    "styles", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>

생성] 소스는 이것이다 :

<link data-turbolinks-track="true" href="/stylesheets/bootstrap.min.css" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/stylesheets/styles.css" media="all" rel="stylesheet" />
<script data-turbolinks-track="true" src="/assets/application-0c647c942c6eff10ad92f1f2b0c64efe.js"></script>

레일처럼 보이는이 제대로 컴파일 된 CSS 파일을 찾고되지 않습니다. 그러나 아주 (으로 통지 /assets/****.js 경로)가 자바 스크립트에 대한 제대로 작동 왜 혼란.

해결법

  1. ==============================

    1.레일 4에서 아래의 변경해야합니다 :

    레일 4에서 아래의 변경해야합니다 :

    config.assets.compile = true
    config.assets.precompile =  ['*.js', '*.css', '*.css.erb'] 
    

    이 날 함께 작동합니다. 자산 컴파일 사전에 다음 명령을 사용하여

    RAILS_ENV=production bundle exec rake assets:precompile
    

    행운을 빌어 요!

  2. ==============================

    2.난 그냥 같은 문제가 없었다 및 설정 / 환경 / production.rb에서이 설정을 발견 :

    난 그냥 같은 문제가 없었다 및 설정 / 환경 / production.rb에서이 설정을 발견 :

    # Rails 4:
    config.serve_static_assets = false
    
    # Or for Rails 5:
    config.public_file_server.enabled = false
    

    true로 변경하면 작업을 얻었다. 기본적으로 당신이 레일 응용 프로그램에게 프록시 대신 공용 폴더에서 파일에 대한 요청을 처리하기 위해 프런트 엔드 웹 서버를 구성 할 것으로 예상 레일로 보인다. 아마 당신은 당신의 자바 스크립트 파일이 아닌 당신의 CSS 스타일 시트에 대한 이런 짓을 한?

    (참조 5 문서를 레일). 레일 (5)과, 코멘트 바와 같이, 기본 설정 config.public_file_server.enabled ENV = [ 'RAILS_SERVE_STATIC_FILES'] 때문에 그냥은 환경 변수를 설정할 수있다 RAILS_SERVE_STATIC_FILES. 본?

  3. ==============================

    3./config/environments/production.rb에서 나는이를 추가했다 :

    /config/environments/production.rb에서 나는이를 추가했다 :

    Rails.application.config.assets.precompile += %w( *.js ^[^_]*.css *.css.erb )
    

    의 .js은 이미 미리 컴파일하지만, 어쨌든 그것을 추가하기했다. .CSS와 .css.erb 분명히 자동으로 발생하지 않습니다. 에서 ^ [^ _] 제외 파셜 컴파일되고 - 이는 정규 표현식이다.

    이것은 문서가 명확하게 자산 파이프 라인이 기본적으로 활성화되어 있지만이 자바 스크립트에 적용된다는 사실을 명확히하지 않는 상태 것을 조금 실망입니다.

  4. ==============================

    4.나는 변경하여이 문제를 해결할 수 있었다 : 에 config.assets.compile = 거짓 config.assets.compile는 /config/environments/production.rb에서 진정한 =

    나는 변경하여이 문제를 해결할 수 있었다 : 에 config.assets.compile = 거짓 config.assets.compile는 /config/environments/production.rb에서 진정한 =

    업데이트 (2018 년 6 월 24 일) : 사용중인 톱니의 버전 미만 2.12.5, 3.7.2, 또는 4.0.0.beta8 경우이 방법은 보안 취약점을 생성

  5. ==============================

    5.레일 5의 경우, 후속의 설정 코드를 사용하도록 설정해야합니다 :

    레일 5의 경우, 후속의 설정 코드를 사용하도록 설정해야합니다 :

    config.public_file_server.enabled = TRUE

    기본적으로 설정이 라인에 5 배를 레일 :

    config.public_file_server.enabled = ENV는. 선물 [ 'RAILS_SERVE_STATIC_FILES']?

    따라서, 당신은 참으로 환경 변수 RAILS_SERVE_STATIC_FILES을 설정해야합니다.

  6. ==============================

    6.당신이 생산 자산을 제공하기 위해 달성해야한다 2 가지가 있습니다 :

    당신이 생산 자산을 제공하기 위해 달성해야한다 2 가지가 있습니다 :

    1) 자산을 미리 컴파일하려면 몇 가지 선택이있다.

    카피 스트라 노에 대한 작업의 코드는 다음과 유사합니다 :

    on roles(:app) do
      if DEPLOY_ENV == 'production'
        execute("cd #{DEPLOY_TO_DIR}/current && RAILS_ENV=production rvm #{ruby_string} do rake assets:precompile")
      end
    end
    

    2) 이제, 프로덕션 서버에서 자산을 가지고, 당신은 브라우저에 서비스를 제공해야합니다.

    다시 말하지만, 당신은 몇 가지 선택이있다.

  7. ==============================

    7.더 이상 4 레일없는 자산의 비 핑거 프린트 버전을 생성 : 스타일 /있는 style.css 당신을 위해 생성되지 않습니다.

    더 이상 4 레일없는 자산의 비 핑거 프린트 버전을 생성 : 스타일 /있는 style.css 당신을 위해 생성되지 않습니다.

    당신이 stylesheet_link_tag를 사용하는 경우 다음 스타일 시트에 대한 올바른 링크가 생성됩니다

    또한을 styles.css는 미리 컴파일 된 것들의 목록입니다 config.assets.precompile에 있어야합니다

  8. ==============================

    8.당신의 Production.rb 파일 행을 변경

    당신의 Production.rb 파일 행을 변경

    config.assets.compile = false
    

    으로

    config.assets.compile = true
    

    또한 추가

    config.assets.precompile =  ['*.js', '*.css', '*.css.erb']
    
  9. ==============================

    9.내 동료 중 일부는 위의이 작업을 수행하는 것이 좋습니다 있습니다 :

    내 동료 중 일부는 위의이 작업을 수행하는 것이 좋습니다 있습니다 :

    config.serve_static_assets = true  ## DON”T DO THIS!! 
    config.public_file_server.enabled = true ## DON”T DO THIS!!
    

    레일 자산 파이프 라인은 위의 방법으로 말한다 :

    자산을 사전 컴파일.

    RAILS_ENV 생산 레이크 자산을 = : 사전 컴파일을

    당신은 아마 레이크 작업과 그 작업을 수행 할 수 있습니다.

  10. ==============================

    10.우분투 서버 14.04, 루비 2.2.1을 실행하고 난 다음에 한 4.2.4 레일 있어요 배포 turorial 디지털 오션 모든 것이 잘 갔다하지만 브라우저에 가서 내 VPS 내 응용 프로그램의 IP 주소를 입력 할 때 않고로드되지만에서 스타일과 자바 스크립트.

    우분투 서버 14.04, 루비 2.2.1을 실행하고 난 다음에 한 4.2.4 레일 있어요 배포 turorial 디지털 오션 모든 것이 잘 갔다하지만 브라우저에 가서 내 VPS 내 응용 프로그램의 IP 주소를 입력 할 때 않고로드되지만에서 스타일과 자바 스크립트.

    응용 프로그램은 유니콘과 Nginx와 함께 실행됩니다. '/ 가정 / 전개 / 응용 프로그램 / 블로그'다음 명령을 실행 내 사용자의 전개 '로 SSH를 사용하여 내 서버를 입력이 문제를 해결하고있는 내 응용 프로그램의 경로로 이동합니다 :

    RAILS_ENV=production bin/rake assets:precompile
    

    그럼 난 그냥 VPS를 다시 시작하고 바로 그거야! 그것은 나를 위해 작동합니다!

    그것은 다른 사람에 유용 할 수있는 희망!

  11. ==============================

    11.사전 컴파일이 설정되어있는 경우에는 필요하지 마십시오

    사전 컴파일이 설정되어있는 경우에는 필요하지 마십시오

    config.assets.compile = true
    

    이 그대로 자산을 사는 역할을합니다.

    우리의 문제는 우리는 설정 / secrets.yml에서 개발 비밀 키의 기본 세트가 있었다

    development:
        secret_key_base: '83d141eeb181032f4070ae7b1b27d9ff'
    

    프로덕션 환경에 필요한 항목

  12. ==============================

    12.

    Rails.application.config.assets.precompile += ['admin.js', 'admin.css', 'swfObject.js']
    

    http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets

  13. ==============================

    13.우선은 할 수 있습니다, 당신의 자산을 확인 자산을 사전 컴파일에서 일부 오류가 있습니다.

    우선은 할 수 있습니다, 당신의 자산을 확인 자산을 사전 컴파일에서 일부 오류가 있습니다.

    생산 ENV에서하려면 사전 컴파일 자산이 명령을 실행합니다 :

    RAILS_ENV=production rake assets:precompile
    

    이 오류가 표시되면, 먼저 제거

    "정의되지 않은 변수"오류 부하의 경우에는 그 변수 파일을 다른 파일에서 사용하기 전에.

    예:

    @import "variables";
    @import "style";
    

    자산의 사전 compiliation의 application.rb 파일 설정 순서

    예:

    config.assets.precompile += [ 'application.js', 'admin.js', 'admin/events.js', 'admin/gallery.js', 'frontendgallery.js']
    
    config.assets.precompile += [ 'application.css', 'admin.css','admin/events.css', 'admin/gallery.css', 'frontendgallery.css']
    
  14. ==============================

    14.이 발견 :

    이 발견 :

    구성 옵션 config.serve_static_assets는 역할을 명확히하기 위해 config.serve_static_files로 이름이 변경되었습니다.

    의 설정 / 환경 / production.rb :

    # Disable serving static files from the `/public` folder by default since
    # Apache or NGINX already handles this.
    config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
    

    그래서 ENV의 RAILS_SERVE_STATIC_FILES를 설정하거나 정적 파일을 봉사의 Nginx를 사용하여. config.serve_static_assets = 진정한 의지 여전히 작동하지만 미래의 제거를 추가합니다.

  15. ==============================

    15.이 연령을 종종 시간이 초과 될 수 있기 때문에이 카피 스트라 노 자산이 미리 컴파일 할 수 있도록 권장하지 않습니다. 지역 자산을 사전 컴파일을하려고합니다.

    이 연령을 종종 시간이 초과 될 수 있기 때문에이 카피 스트라 노 자산이 미리 컴파일 할 수 있도록 권장하지 않습니다. 지역 자산을 사전 컴파일을하려고합니다.

    첫째, 설정에서 설정 / application.rb config.assets.initialize_on_precompile = 거짓 다음 로컬 할 RAILS_ENV = 생산 빈 / 레이크 자산 : 사전 컴파일 그리고 자식에 그 공공 / 자산을 추가 할 수 있습니다.

    및 설정 / 환경 / development.rb, 미리 컴파일 된 자산을 사용하지 않도록하기 위해 자산 경로를 변경 :

    config.assets.prefix = '/ dev에-자산'

    당신은 DB 연결 문제, 수단이있는 경우 u는 그 용도의 DB를 초기화합니다. 주위 하나의 방법은 어쩌면 production2.rb으로 중복 production.rb하여 새로운 환경을 설정하는 것입니다, 그리고 database.yml을에서, 개발 DB 설정으로 production2 환경을 추가 할 수 있습니다. 다음 할

    RAILS_ENV는 production2 빈 / 레이크 자산을 = : 사전 컴파일을

    당신은 여전히 ​​자산 몇 가지 문제에 직면하는 경우, 예를 들어 ckeditor에 대한, 설정 / 초기화 / assets.rb에 JS 파일을 추가

    w는 Rails.application.config.assets.precompile + = % (ckeditor.js)

  16. ==============================

    16.제가 틀릴 수도 있지만 추천 사람들은 변화

    제가 틀릴 수도 있지만 추천 사람들은 변화

    config.assets.compile 사실 =

    이 라인의 주석을 읽 프리 D 자산 놓친 #Do 자산 파이프 라인이 아닌 경우 대체.

    이 true로 설정하여 당신이 그것을 우회 파이프 라인마다 실행 오히려 문제를 해결하지만,하지 않는 것이 좋습니다. 이것은 확실히 성능을 죽이고 파이프 라인의 목적을 패배해야합니까?

    나는이 같은 오류가 있었고, 그것은 레일에 대해 알고하지 않았다 하위 폴더에서 실행되는 응용 프로그램 때문이었다.

    내 CSS 파일 그래서 가정에서 / 하위 폴더 / 응용 프로그램 / 공공 / ....하지만 레일은 / 응용 프로그램 / 공공 / 가정에서 찾고 있던 곳 ...

    하위 폴더에서 당신의 응용 프로그램을 이동하거나 하위 폴더에 있음 레일을 이야기 중 하나를 시도하십시오.

  17. ==============================

    17.

    location ~ ^/assets/ {
      expires 1y;
      add_header Cache-Control public;
      add_header ETag "";
    }
    

    이는 생산 나를 위해 문제를 해결. 의 nginx의 설정에 넣어.

  18. ==============================

    18.사전 컴파일은 성공했지만 예상대로 일이 작동하지 않았다 : 심지어 우리는 RAILS_ENV = 간부 인 레이크 자산 번들 생산이 같은 문제에 직면했다. 우리는 유니콘 여기 주범이었다 발견했다.

    사전 컴파일은 성공했지만 예상대로 일이 작동하지 않았다 : 심지어 우리는 RAILS_ENV = 간부 인 레이크 자산 번들 생산이 같은 문제에 직면했다. 우리는 유니콘 여기 주범이었다 발견했다.

    귀하의 경우와 동일, 심지어 우리는 자산을 컴파일 한 후 유니콘 다시 시작하는 데 사용됩니다. 그것은 마스터 과정을 유니콘를 다시 시작할 때 만의 작업자 프로세스가 다시 시작됩니다 것으로 나타났습니다 및되지 않았다. 이것은 올바른 자산 게재하지 않은 주된 이유입니다.

    나중에 자산을 컴파일 한 후, 우리는 중지와 유니콘 마스터 프로세스는 다시 시작되고 올바른 자산을 제공 받고 있다고 그렇게 유니콘 시작했다. 유니콘를 다시 시작 비교할 때 중지와 유니콘 시작하는 다운 타임에 약 10 초을 제공합니다. 이것은 장기적 해결책으로 유니콘에서 푸마로 이동이고 사용할 수있는 대안이다.

  19. from https://stackoverflow.com/questions/18700219/rails-4-assets-not-loading-in-production by cc-by-sa and MIT license