[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.로컬 프로덕션 환경을 테스트 할 때, 당신은 로컬 자산을 컴파일해야합니다. 단순히 명령 아래를 실행합니다 :
로컬 프로덕션 환경을 테스트 할 때, 당신은 로컬 자산을 컴파일해야합니다. 단순히 명령 아래를 실행합니다 :
RAILS_ENV=production bundle exec rake assets:precompile
그것은 공공 / 자산에서 모든 자산을 생성합니다.
다음으로, 당신은 자산 자체를 제공하기 위해 레일을 이야기해야합니다. 서버 소프트웨어 (예. Nginx에 또는 아파치) Heroku가 같은 환경에서 당신을 위해 그것을 할,하지만 로컬 당신은 레일이 그것을 할 수 있도록해야한다. 당신의 production.rb이 변경 :
config.serve_static_assets = true
하지만 생산에 코드를 밀어 전에 다시 false로 설정해야합니다!
-
==============================
2.이 소리는 내가 가지고 있던 문제를 좋아한다.
이 소리는 내가 가지고 있던 문제를 좋아한다.
나는이 레일 4.0.0 자산 파이프 라인의 버그 제시하고 설명 할 수 없 설정에 의해 완화 블로그를 발견 ...
config.assets.compile = true
...의 설정 / 환경 / production.rb
이외에도 어떻게 든 실제로 작업에의 자산 파이프 라인을 발로에서, 그 설정은 자산의 라이브 컴파일 켜집니다. 당신은 수동으로 사전 컴파일 자산을 배포 할 때 경우에 그와 함께, 일반적으로 생산 성능을 위해 나쁜 일이지만,
rake assets:precompile
(필요한 자산은 이미 미리 컴파일 되었기 때문에) ... 라이브 컴파일이 발생해서는 안됩니다.
이게 도움이 되길 바란다 :)
-
==============================
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.production.rb에서 설정을 변경 :
production.rb에서 설정을 변경 :
레일 3.X
config.serve_static_assets = true
레일 4.x의
config.serve_static_files = true
-
==============================
5.이 같은 파일을 확인합니다 :
이 같은 파일을 확인합니다 :
public/assets/.sprockets-manifest-3f7771d777ceb581d754e4fad88aa69c.json
프로덕션 서버에 미리 컴파일 된 자산을 추진하는 경우가 숨겨진 '점'파일이 밀려와이 필수 파일이 생산에 그것을 확인하지 않습니다 방해하고 있습니다 가능성이 있습니다.
내 환경에서 나는 통합 환경에서 사전 컴파일 자산이 필요하고 생산 시스템에서 자산을 컴파일 할 필요가 없도록 생산이 밀어 넣습니다. 내가 잘못 생산 기계에 밀려에서 모든 숨김 파일을 차단했다.
이 대답은 당신을 위해 작동하는 경우, 자산 경로가 생성되어 있는지 확인하기 위해 프로덕션 서버에서 브라우저에서 생성 된 HTML 소스를 확인 참조하십시오. 이 같은 스크립트 태그를 참조하는 경우 :
<script data-turbolinks-track="true" src="/javascripts/application.js"></script>
src 속성을 확인합니다. 그것은 / 자산 / 자바 스크립트로 시작해야합니다. 이 경우에는 함께 / 자산 중 하나가 미리 컴파일 된 생각하지 않습니다 레일을 나타냅니다 자바 스크립트를 시작합니다.
나는 내 통합 서버에 미리 컴파일 후 .sprockets 매니페스트 * 파일을 밀어 보장, 생산 (현재 rsync를) 내 푸시를 업데이트하여이 문제를 수정했습니다.
그것은 정적 파일의보다 현실적인 봉사를 처리하기 때문에 또한, 나는 오히려에 WEBrick보다, 내 통합 테스트 서버로 독립 여객를 사용합니다.
-
==============================
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.레일의 설정은 5.x를
레일의 설정은 5.x를
설정 / 초기화 / assets.rb :
Rails.application.config.public_file_server.enabled = true
https://edgeguides.rubyonrails.org/configuring.html
-
==============================
8.다음 명령은 로컬 나를 위해 작동합니다.
다음 명령은 로컬 나를 위해 작동합니다.
rails server -e production
저도 같은 오류 "ActionController :: RoutingError을 (없음 경로 일치 [GET]"/assets/application.css "나는 소스를 미리 컴파일 된 후에도 레일의". "실행하는 동안", 변경 설정 사전 컴파일 사실. 그것은 아직도 수 부하 있어요 정확히.
"-e 생산"옵션은 그 RoutingError 사라지게했다.
from https://stackoverflow.com/questions/17904949/rails-app-not-serving-assets-in-production-environment by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 유효성 검사 비용 - 루비 온 레일즈 (0) | 2020.02.23 |
---|---|
[RUBY-ON-RAILS] 레일 : 커피 스크립트 또는 자바 스크립트 자산 파일에 액세스 컨트롤러 인스턴스 변수 (0) | 2020.02.23 |
[RUBY-ON-RAILS] 루비 레일에 : 어떻게 액티브를 사용하여 두 개의 열이 종류는 무엇입니까? (0) | 2020.02.23 |
[RUBY-ON-RAILS] 루비 1.9.2 방법 Windows에서 RMagick를 설치 하는가? (0) | 2020.02.23 |
[RUBY-ON-RAILS] 열쇠 속성을 중첩 4.0 강력한 매개 변수를 레일이 해시 포인트 (0) | 2020.02.23 |