복붙노트

[RUBY-ON-RAILS] 앱은 생산 환경에서 자산 봉사하지 난간

RUBY-ON-RAILS

앱은 생산 환경에서 자산 봉사하지 난간

개발 환경에서 실행할 때 내 응용 프로그램은 잘 작동합니다. 생산에서, 브라우저는 CSS와 JS 파일에 액세스 할 수 없습니다 콘솔에 메시지가 같이있다 (서버 -e 생산 레일) :

I, [2013-07-27T21:00:59.105459 #11449]  INFO -- : Started GET "/javascripts/application.js" for 99.102.22.124 at 2013-07-27 21:00:59 +0000
F, [2013-07-27T21:00:59.108302 #11449] FATAL -- : 
ActionController::RoutingError (No route matches [GET] "/javascripts/application.js"):

프로덕션 환경에서 HTML 소스에서 헤드 부분 :

<head>
  <title>a Social Server</title>
  <link data-turbolinks-track="true" href="/stylesheets/application.css" media="all" rel="stylesheet">
  <link href="//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css" rel="stylesheet">
  <script data-turbolinks-track="true" src="/javascripts/application.js"></script>
  <meta content="authenticity_token" name="csrf-param">
<meta content="jYM4IAXTXAuKWeD4FEVrXgXRNFeB6EazU68ZBQfRqNY=" name="csrf-token">
</head>

반면에 개발 ENV에서 머리 부분의 모양은 좋아 :

<head>
  <title>a Social Server</title>
  <link data-turbolinks-track="true" href="/assets/application.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/twitter-bootstrap-static/bootstrap.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/twitter-bootstrap-static/fontawesome.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/bootstrap_and_overrides.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/instagram.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/socialserver.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/jquery.ui.core.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/jquery.ui.theme.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/jquery.ui.accordion.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/jquery.ui.menu.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/jquery.ui.autocomplete.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/jquery.ui.button.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/jquery.ui.datepicker.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/jquery.ui.resizable.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/jquery.ui.dialog.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/jquery.ui.progressbar.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/jquery.ui.selectable.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/jquery.ui.slider.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/jquery.ui.spinner.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/jquery.ui.tabs.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/jquery.ui.tooltip.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/jquery.ui.base.css?body=1" media="all" rel="stylesheet">
<link data-turbolinks-track="true" href="/assets/jquery.ui.all.css?body=1" media="all" rel="stylesheet">
  <link href="//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css" rel="stylesheet">
  <script data-turbolinks-track="true" src="/assets/jquery.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery_ujs.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/twitter/bootstrap/bootstrap-transition.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/twitter/bootstrap/bootstrap-alert.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/twitter/bootstrap/bootstrap-modal.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/twitter/bootstrap/bootstrap-dropdown.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/twitter/bootstrap/bootstrap-scrollspy.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/twitter/bootstrap/bootstrap-tab.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/twitter/bootstrap/bootstrap-tooltip.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/twitter/bootstrap/bootstrap-popover.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/twitter/bootstrap/bootstrap-button.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/twitter/bootstrap/bootstrap-collapse.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/twitter/bootstrap/bootstrap-carousel.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/twitter/bootstrap/bootstrap-typeahead.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/twitter/bootstrap/bootstrap-affix.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/twitter/bootstrap.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/turbolinks.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.core.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.widget.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.accordion.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.position.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.menu.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.autocomplete.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.button.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.datepicker.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.mouse.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.draggable.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.resizable.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.dialog.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.droppable.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.effect.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.effect-blind.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.effect-bounce.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.effect-clip.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.effect-drop.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.effect-explode.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.effect-fade.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.effect-fold.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.effect-highlight.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.effect-pulsate.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.effect-scale.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.effect-shake.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.effect-slide.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.effect-transfer.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.progressbar.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.selectable.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.slider.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.sortable.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.spinner.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.tabs.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.tooltip.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.all.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/application.js?body=1"></script>
  <meta content="authenticity_token" name="csrf-param">
<meta content="jYM4IAXTXAuKWeD4FEVrXgXRNFeB6EazU68ZBQfRqNY=" name="csrf-token">
</head>

나는 장애인 액티브을 수 있도록 응용 프로그램은 데이터베이스를 사용하지 않습니다. 설정 파일의 조각 :

application.rb

require File.expand_path('../boot', __FILE__)
#require 'rails/all'
require "action_controller/railtie"
require "action_mailer/railtie"
require "rails/test_unit/railtie"
require "sprockets/railtie"
Bundler.require(:default, Rails.env)
module Socialserver
  class Application < Rails::Application
  end
end

production.rb

Socialserver::Application.configure do
   config.cache_classes = true
   config.eager_load = true
   config.consider_all_requests_local       = false
   config.action_controller.perform_caching = true
   config.serve_static_assets = false
   config.assets.js_compressor = :uglifier
   config.assets.compile = false
   config.assets.digest = true
   config.assets.version = '1.0'
   config.log_level = :info
   config.i18n.fallbacks = true
   config.active_support.deprecation = :notify
   config.log_formatter = ::Logger::Formatter.new
   config.assets.paths << Rails.root.join('app', 'assets', 'fonts')
   config.assets.precompile += %w( .svg .eot .woff .ttf )
end

development.rb :

Socialserver::Application.configure do
  config.cache_classes = false
  config.eager_load = false
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false
  config.action_mailer.raise_delivery_errors = false
  config.active_support.deprecation = :log
  config.assets.debug = true
end

Gemfile :

source 'https://rubygems.org'
gem 'rails', '4.0.0'
gem 'sass-rails', '~> 4.0.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'jquery-rails'
gem 'jquery-ui-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 1.2'
group :doc do
  gem 'sdoc', require: false
end
group :twitter do
  gem 'twitter', '4.8.1'
end
group :instagram do
  gem 'instagram', '0.10.0'
end
group :tumblr do
  gem 'tumblr_client'
end
gem 'twitter-bootstrap-rails'
gem 'therubyracer' #needed for runtime js on amazon ec2.

나는 너무 많은 정보를 게시 드려 죄송합니다. 나는 정보가 관련이있을 수 느꼈다.

추신. 난 단지 절반 그래서 나와 함께 곰, 레일의 지식을 구운했다. 감사합니다 ~

해결법

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

    1.로컬 프로덕션 환경을 테스트 할 때, 당신은 로컬 자산을 컴파일해야합니다. 단순히 명령 아래를 실행합니다 :

    로컬 프로덕션 환경을 테스트 할 때, 당신은 로컬 자산을 컴파일해야합니다. 단순히 명령 아래를 실행합니다 :

    RAILS_ENV=production bundle exec rake assets:precompile
    

    그것은 공공 / 자산에서 모든 자산을 생성합니다.

    다음으로, 당신은 자산 자체를 제공하기 위해 레일을 이야기해야합니다. 서버 소프트웨어 (예. Nginx에 또는 아파치) Heroku가 같은 환경에서 당신을 위해 그것을 할,하지만 로컬 당신은 레일이 그것을 할 수 있도록해야한다. 당신의 production.rb이 변경 :

    config.serve_static_assets = true
    

    하지만 생산에 코드를 밀어 전에 다시 false로 설정해야합니다!

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

    2.이 소리는 내가 가지고 있던 문제를 좋아한다.

    이 소리는 내가 가지고 있던 문제를 좋아한다.

    나는이 레일 4.0.0 자산 파이프 라인의 버그 제시하고 설명 할 수 없 설정에 의해 완화 블로그를 발견 ...

    config.assets.compile = true
    

    ...의 설정 / 환경 / production.rb

    이외에도 어떻게 든 실제로 작업에의 자산 파이프 라인을 발로에서, 그 설정은 자산의 라이브 컴파일 켜집니다. 당신은 수동으로 사전 컴파일 자산을 배포 할 때 경우에 그와 함께, 일반적으로 생산 성능을 위해 나쁜 일이지만,

    rake assets:precompile
    

    (필요한 자산은 이미 미리 컴파일 되었기 때문에) ... 라이브 컴파일이 발생해서는 안됩니다.

    이게 도움이 되길 바란다 :)

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

    3.앞서 언급 config.serve_static_assets으로 사용되지 않으며 config.serve_static_files로 대체. 만약 하나 개의 시험 일정 설정 / 환경 / production.rb 레일 - 4.2 다음에 대해 하나 개의 발견이 :

    앞서 언급 config.serve_static_assets으로 사용되지 않으며 config.serve_static_files로 대체. 만약 하나 개의 시험 일정 설정 / 환경 / production.rb 레일 - 4.2 다음에 대해 하나 개의 발견이 :

      # 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?
    

    함축이 설정되는 로컬 테스트시 원하는 결과를 제공 레일의 -e 생산을 실행하기위한 세션 전에 "어떠한 값을"= (BASH에서) 환경 변수 수출 RAILS_SERVE_STATIC_FILES 수출도 기억하는 것을 방지 할 생산 호스트로 밀어 전에 production.rb을 코딩.

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

    4.production.rb에서 설정을 변경 :

    production.rb에서 설정을 변경 :

    레일 3.X

    config.serve_static_assets = true
    

    레일 4.x의

    config.serve_static_files = true
    
  5. ==============================

    5.이 같은 파일을 확인합니다 :

    이 같은 파일을 확인합니다 :

    public/assets/.sprockets-manifest-3f7771d777ceb581d754e4fad88aa69c.json
    

    프로덕션 서버에 미리 컴파일 된 자산을 추진하는 경우가 숨겨진 '점'파일이 밀려와이 필수 파일이 생산에 그것을 확인하지 않습니다 방해하고 있습니다 가능성이 있습니다.

    내 환경에서 나는 통합 환경에서 사전 컴파일 자산이 필요하고 생산 시스템에서 자산을 컴파일 할 필요가 없도록 생산이 밀어 넣습니다. 내가 잘못 생산 기계에 밀려에서 모든 숨김 파일을 차단했다.

    이 대답은 당신을 위해 작동하는 경우, 자산 경로가 생성되어 있는지 확인하기 위해 프로덕션 서버에서 브라우저에서 생성 된 HTML 소스를 확인 참조하십시오. 이 같은 스크립트 태그를 참조하는 경우 :

    <script data-turbolinks-track="true" src="/javascripts/application.js"></script>
    

    src 속성을 확인합니다. 그것은 / 자산 / 자바 스크립트로 시작해야합니다. 이 경우에는 함께 / 자산 중 하나가 미리 컴파일 된 생각하지 않습니다 레일을 나타냅니다 자바 스크립트를 시작합니다.

    나는 내 통합 서버에 미리 컴파일 후 .sprockets 매니페스트 * 파일을 밀어 보장, 생산 (현재 rsync를) 내 푸시를 업데이트하여이 문제를 수정했습니다.

    그것은 정적 파일의보다 현실적인 봉사를 처리하기 때문에 또한, 나는 오히려에 WEBrick보다, 내 통합 테스트 서버로 독립 여객를 사용합니다.

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

    6.나는 레일 생산으로 사전 컴파일 자산하거나 필요도 둘 경우 config.assets.compile 사용 4.x의 생각합니다.

    나는 레일 생산으로 사전 컴파일 자산하거나 필요도 둘 경우 config.assets.compile 사용 4.x의 생각합니다.

    기본값은 생산 환경을위한 행동이다 레일 "미리 컴파일 된 자산 놓친 경우하지 대체 자산 파이프 라인 않는다"고 말했다. 그래서하지 않습니다. 하지 COMPI에 사용

    config.assets.compile = false
    

    당신은 당신이 사용하지 않아도이 옵션을 사용하는 경우 :

    config.serve_static_files = true
    

    자산이 미리 컴파일되지 않은 경우 때문에, 레일 전에 컴파일 요청을 처리합니다.

    당신이 생산되기 전에 사전 컴파일 자산을한다면 당신이 미리 컴파일 된 자산을 제공하기 위해 http_server이없는 경우 레일에 진실은 요청을 처리 = 당신은하지가 config.assets.compile 필요 = true를 수행하지만 당신은 config.serve_static_files이 필요합니다.

    석양 config.serve_static_assets이되지 않습니다.

    DEPRECATION WARNING: The configuration option `config.serve_static_assets` has been renamed to `config.serve_static_files` to clarify its role (it merely enables serving everything in the `public` folder and is unrelated to the asset pipeline). The `serve_static_assets` alias will be removed in Rails 5.0. Please migrate your configuration files accordingly.
    

    내가 무슨 일을 이해하기 위해이 응답 도움 당신 (독자가) 정말 어떻게 희망

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

    7.레일의 설정은 5.x를

    레일의 설정은 5.x를

    설정 / 초기화 / assets.rb :

    Rails.application.config.public_file_server.enabled = true
    

    https://edgeguides.rubyonrails.org/configuring.html

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

    8.다음 명령은 로컬 나를 위해 작동합니다.

    다음 명령은 로컬 나를 위해 작동합니다.

    rails server -e production
    

    저도 같은 오류 "ActionController :: RoutingError을 (없음 경로 일치 [GET]"/assets/application.css "나는 소스를 미리 컴파일 된 후에도 레일의". "실행하는 동안", 변경 설정 사전 컴파일 사실. 그것은 아직도 수 부하 있어요 정확히.

    "-e 생산"옵션은 그 RoutingError 사라지게했다.

  9. from https://stackoverflow.com/questions/17904949/rails-app-not-serving-assets-in-production-environment by cc-by-sa and MIT license