Configuring Rails Apps.

제 72회 Biweekly Lecture

2014-10-14

Majestin

- ROR Lab. Season 4 -

  • Action Controller
  • Action Dispatch
  • Action View

Action Controller

  • 요청 처리
  • 파라미터 추출
  • 사용자가 유도한 액션

config.action_controller.asset_host

에셋의 호스트를 설정

에셋 호스트로 CDN을 사용할 경우 유용

config.action_controller.asset_host = Proc.new { |source|
    if source.starts_with?('/images') or source.starts_with?('/statics')
        "http://statics.example.com"
    else
        ""
    end
}

config.action_controller.perform_caching

어플리케이션의 캐싱 수행 여부를 설정합니다. 

개발 환경에서는 false로 설정되어 있고 배포 환경에선 true로 설정 됩니다.

config.action_controller.perform_caching = true

config.action_controller.default_static_extension

캐시 된 페이지들의 확장자를 설정합니다. 기본값은 `.html` 입니다.

config.action_controller.default_charset

컨트롤러의 기본 문자 세트를 지정합니다.

기본값은 "utf-8" 입니다. 

config.action_controller.default_charset = "euc-kr"

config.action_controller.logger

Action Controller에서 로그 정보를 사용합니다.  

로깅(로그 정보 기록)을 사용하지 않으려면 `nil`로 설정합니다.

config.action_controller.logger = nil

config.action_controller.request_forgery_protection_token

요청위조(RequestForgery)방지를 위한 token 매개 변수 이름을 설정합니다. `protect_from_forgery`의 호출은 기본적으로 `:authenticity_token`을 설정합니다.

config.action_controller.allow_forgery_protection

CSRF 보호의 활성화 또는 비활성화를 합니다. 

기본적으로 테스트 환경에서는 `false`이고 다른 환경에선 `true`로 설정되어 있습니다. 

config.action_controller.relative_url_root

Rails에 배포하는 하위 디렉토리를 전달하는 데 사용됩니다.

기본값은 `ENV['RAILS_RELATIVE_URL_ROOT']` 입니다.

When precompile, set ENV

RAILS_RELATIVE_URL_ROOT=/rorlab bundle exec rake assets:precompile

config.action_controller.permit_all_parameters

모든 매개 변수 mass assignment를 기본 값으로 허용 여부를 설정합니다.

기본값은 `false` 입니다. 

http://code.tutsplus.com/tutorials/mass-assignment-rails-and-you--net-31695

attrs = {:first => "John", :last => "Doe", :email => "john.doe@example.com"}
user = User.new(attrs)
user.first #=> "John"
user.last  #=> "Doe"
user.email #=> "john.doe@example.com"
 
만약 mass assignment가 없다면 위의 식은 다음과 같은 되어야 한다. 

attrs = {:first => "John", :last => "Doe", :email => "john.doe@example.com"}
user = User.new
user.first = attrs[:first]
user.last  = attrs[:last]
user.email = attrs[:email]
user.first #=> "John"
user.last  #=> "Doe"
user.email #=> "john.doe@example.com"

config.action_controller.action_on_unpermitted_params

만약 매개 변수가 명시적으로 허용되지 않은 것이라면 로깅 또는 예외 발생을 활성화합니다. 

`:log` 또는 `:raise`를 설정하여 활성화합니다. 

기본값으로 개발 환경과 테스트 환경에선 `:log`이며, 그 외의 환경에서는 `false`로 설정되어 있습니다. 

config.action_controller.action_on_unpermitted_params = ':log' #':raise'

Action Dispatch

  • Web 요청을 라우팅
  • ActionController에 요청 전달

config.action_dispatch.session_store

세션 데이터 저장소의 이름을 설정합니다.

기본값으로 `:cookie_store`이며 다른 유효한 옵션은`:active_record_store`, `:mem_cache_store` 또는 사용자 정의 클래스의 이름입니다.

config.action_dispatch.session_store 

config.action_dispatch.default_headers

각 응답에 설정할 HTTP 헤더의 해시값입니다.

기본적으로 아래와 같이 정의됩니다.

config.action_dispatch.default_headers = {
          'X-Frame-Options' => 'SAMEORIGIN',
          'X-XSS-Protection' => '1; mode=block',
          'X-Content-Type-Options' => 'nosniff'
}


X-Frame-Options 은 다음 세가지 값 중 하나를 사용할 수 있습니다.
 DENY	 해당 페이지는 frame을 표시할 수 없습니다.
 SAMEORIGIN	 해당 페이지와 동일한 orgin에 해당하는 frame만 표시할 수 있습니다.
 ALLOW-FROM uri	 해당 페이지는 지정된 orgin에 해당하는 frame만 표시할 수 있습니다.

X-XSS-Protection '1; mode=block' 레일스 디폴트 값 - XSS 공격이 감지되면 XSS Auditor와 차단 페이지를 사용한다. XSS Auditor 기능을 사용하지 않을 때 '0;'으로 설정한다. (이것은 응답 컨텐츠 스크립트가 요청 파라미터로부터 올 경우에 유용한다.) 

X-Content-Type-Options 'nosniff' 레일스 디폴트 값 - 브라우저가 파일의 MIME 타입을 추측하지 못하게 한다. 

config.action_dispatch.tld_length

어플리케이션을 위한 TLD(최상위 도메인)의 길이를 설정합니다.

기본값은 `1` 입니다.

(예를 들어, co.kr과 같은 도메인을 사용할 경우엔 2로 지정하는 것과 같습니다.) 

ActionDispatch::Callbacks.before,

ActionDispatch::Callbacks.after

요청 전, 후에 실행하는 코드 블럭을 가져옵니다. 

# File actionpack/lib/action_dispatch/middleware/callbacks.rb, line 13
    def self.before(*args, &block)
      set_callback(:call, :before, *args, &block)
    end

Action View

  • HTML이나 XML 생성
  • Rendering Template 관리
  • built-in AJAX를 지원

config.action_view.field_error_proc

Active Record에서 오류를 표시하기 위한 HTML 생성기를 제공합니다.

기본값으로 다음과 같습니다. 

Proc.new do |html_tag, instance|
      %Q(<div class="field_with_errors">#{html_tag}</div>).html_safe
end

config.action_view.default_form_builder

기본적으로 사용할 form builder를 Rails에 전달합니다.

만약 자신의 form builder 클래스를 초기화(개발 환경에서는 각 요청 후에 다시 로드 됩니다.) 후 로드 하려는 경우엔 `String`으로 전달할 수 있습니다.

config.action_view.default_form_builder = 'ActionView::Helpers::FormBuilder'

config.action_view.logger ​

Action View에서 로그 정보 출력에 사용되는 적합한 로거를 사용합니다.

`nil`로 설정시 로깅(정보 기록)은 비활성화 됩니다.  

config.action_view.logger ​= 'nil'

config.action_view.prefix_partial_path_with_controller_namespace

네임 스페이스 이름이 붙은 컨트롤러의 partial을 그리기 위한 템플릿을 하위 디렉토리에서 검색 여부를 결정합니다.

예를 들어, 컨트롤러 이름이 `Admin::PostsController`으로 가정하였을때 템플릿을 렌더링하는 경우는 아래와 같습니다. 

<%= render @post %>

true -> `/admin/posts/_post.erb`의 partial
false -> `/posts/_post.erb`

CONFIGURING RAILS APPLICATIONS Part 6

By hanguk lee

CONFIGURING RAILS APPLICATIONS Part 6

Part 6 - Action Controller, Action Dispatch, Action View

  • 1,029