복붙노트

[RUBY-ON-RAILS] 아니 경로 일치 [GET] / 자산

RUBY-ON-RAILS

아니 경로 일치 [GET] / 자산

내가 프로덕션 환경에서 테스트하기 위해 노력하고있는 레일 응용 프로그램을 가지고있다. 에 / 공공 / 자산 내 모든 자산을 생성 사전 컴파일 : 나는 RAILS_ENV = 생산 레이크 자산을 달렸다. 문제는 그 내 응용 프로그램을 시작할 때 / RAILS_ENV = 생산 레일의 얇은 I get 및 w :

ActionController::RoutingError (No route matches [GET] "/assets/application-eff78fd67423795a7be3aa21512f0bd2.css"):

이 파일은 /public/assets/application-eff78fd67423795a7be3aa21512f0bd2.css에 존재하지만 않습니다.

왜이 RoutingError 받고 있어요에 관해서는 어떤 생각?

해결법

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

    1.생산 모드에서, 레일은 고정 자산을 제공에 대한 책임을지지 않습니다. 따라서이 오류를 얻고있다. 이 레일 주변 단지 래퍼이기 때문에 얇은는 하나 그것을하지 않습니다.

    생산 모드에서, 레일은 고정 자산을 제공에 대한 책임을지지 않습니다. 따라서이 오류를 얻고있다. 이 레일 주변 단지 래퍼이기 때문에 얇은는 하나 그것을하지 않습니다.

    이것은 응용 프로그램의 설정 / 환경 / production.rb에서이 설정에 의해 제어됩니다 :

    config.serve_static_files = false
    

    또는 레일 5 :

    # config/environments/production.rb
    config.public_file_server.enabled = true
    

    또는 설정 ENV는 참으로 [ 'RAILS_SERVE_STATIC_FILES'].

    당신도 그 true로 설정하거나 고정 자산을 될 것입니다 Apache 또는 Nginx와 같은 실제 서버를 사용할 수 있습니다. 나는 탕도 그것을 할 수있다 생각한다.

    당신에게 Heroku에 있다면, 그들은 기본적으로이 설정을 가능하게하는 rails_12factor 보석의 사용을 권장합니다. 이처럼 Gemfile에 생산 그룹으로 보석을 장소 :

    group :production do
      gem 'rails_12factor'
    end
    
  2. ==============================

    2.라이언은 위의 말에 추가, 레일 자산 파이프 라인 가이드는 설치 Apache 또는 nginx를 당신의 고정 자산을 제공하는 방법에 대해 설명합니다.

    라이언은 위의 말에 추가, 레일 자산 파이프 라인 가이드는 설치 Apache 또는 nginx를 당신의 고정 자산을 제공하는 방법에 대해 설명합니다.

    http://guides.rubyonrails.org/asset_pipeline.html

    당신은 정말 그들이 더 나은 잡종 / 얇은 / 유니콘 이상이 작업에 최적화 된 것 같은 설정의 nginx 또는 Apache가 정적 자산을 봉사해야한다.

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

    3.그냥 같은 문제를 해결했다. 내 경우에는 라이언의 답변이 도움이되지 않았습니다. Bratsche 불행하게도이 너무 나를 위해 작동하지 않았다, 레일 가이드 지적했다. 그러나 자원이 도움이되었다. 나는 거기에서 Nginx의 구성을 가져다가 공용 디렉토리를 가리키는 루트 지시어를 추가 그래서. 이 없이는 작동하지 않습니다.

    그냥 같은 문제를 해결했다. 내 경우에는 라이언의 답변이 도움이되지 않았습니다. Bratsche 불행하게도이 너무 나를 위해 작동하지 않았다, 레일 가이드 지적했다. 그러나 자원이 도움이되었다. 나는 거기에서 Nginx의 구성을 가져다가 공용 디렉토리를 가리키는 루트 지시어를 추가 그래서. 이 없이는 작동하지 않습니다.

       # serve static assets
       location ~ ^/assets/ {
         expires 1y;
         root  /path/to/my/cool_project/public;
         add_header Cache-Control public;
    
         add_header ETag "";
         break;
       }
    

    다시 시작의 nginx, 그게입니다.

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

    4.실제로 당신은 어떤 기본 CONFIGS을 수정할 필요가 없었다. 당신은 재 컴파일 자산은 파일을 다시.

    실제로 당신은 어떤 기본 CONFIGS을 수정할 필요가 없었다. 당신은 재 컴파일 자산은 파일을 다시.

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

    5.4.2는 설정 / 환경 / staging.rb 및 production.rb 파일에이 줄을 변경 / 추가했습니다 난간 :

    4.2는 설정 / 환경 / staging.rb 및 production.rb 파일에이 줄을 변경 / 추가했습니다 난간 :

    config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
    

    RAILS_SERVE_STATIC_FILES 설정, 당신은 (유니콘과 같은) 레일즈 서버에서 서비스 자산되지 않은 경우, "거짓"로 기본 설정됩니다 및 RoutingError가 발생합니다.

    이것은 쉽게 수정입니다 :

    config.serve_static_files = true
    
  6. ==============================

    6.레일 5에서 config.serve_static_files 옵션이 변경되었습니다, 그래서 지금 당신은 할 필요가

    레일 5에서 config.serve_static_files 옵션이 변경되었습니다, 그래서 지금 당신은 할 필요가

    config.public_file_server.enabled = true
    

    로컬 자산을 제공합니다.

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

    7.코드 아래 시도 :

    코드 아래 시도 :

    config.assets.compile = true
    

    다음 명령을 실행합니다 :

    RAILS_ENV=production rake assets:precompile
    

    다음 서버에 모든 컴파일 파일과 매니페스트 파일을 누릅니다.

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

    8.나는 내가 가진 내 레일 5 응용 프로그램을 배포하는 미나 + 푸마 +의 nginx를 사용

    나는 내가 가진 내 레일 5 응용 프로그램을 배포하는 미나 + 푸마 +의 nginx를 사용

    ActionController::RoutingError (No route matches [GET] "/assets/application-658cf2ab3ac93aa5cb41a762b52cf49d7184509c307922cd3fbb61b237a59c1a.css")
    

    설정 / 환경 / production.rb 확인

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

    Nginx에 이미이 문제를 처리 올바르게 config (설정)

    upstream puma {
      server unix:///home/deploy/apps/appname/shared/tmp/sockets/appname-puma.sock;
    }
    
    server {
      listen 80 default_server deferred;
      # server_name example.com;
    
      root /home/deploy/apps/appname/current/public;
      access_log /home/deploy/apps/appname/current/log/nginx.access.log;
      error_log /home/deploy/apps/appname/current/log/nginx.error.log info;
    
      location ^~ /assets/ {
        gzip_static on;
        expires max;
        add_header Cache-Control public;
      }
    
      try_files $uri/index.html $uri @puma;
      location @puma {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    
        proxy_pass http://puma;
      }
    
      error_page 500 502 503 504 /500.html;
      client_max_body_size 10M;
      keepalive_timeout 10;
    }
    

    일이 잘 작동합니다.

  9. ==============================

    9.내가 할 것처럼 누군가가 테스트 환경에서 같은 오류가 여기에 도착하면, 나를 여기에 도움이 무엇 :

    내가 할 것처럼 누군가가 테스트 환경에서 같은 오류가 여기에 도착하면, 나를 여기에 도움이 무엇 :

    rails assets:clobber assets:precompile RAILS_ENV=test
    

    그때:

    ps axu | grep your-username
    

    봄 서버 프로세스를 발견하고 자신의 PID는 다음을 통해 그것을 죽일 :

    kill <spring-server-PID>
    
  10. from https://stackoverflow.com/questions/7829480/no-route-matches-get-assets by cc-by-sa and MIT license