Ruby on Rails 3.2 릴리스 노트
Rails 3.2의 주요 기능:
- 더 빠른 개발 모드
- 새로운 라우팅 엔진
- 자동 쿼리 설명
- 태그 로깅
이 릴리스 노트에서는 주요 변경 사항만 다룹니다. 다양한 버그 수정 및 변경 사항에 대해서는 변경 로그를 참조하거나 GitHub의 Rails 주 저장소에서 커밋 목록을 확인하세요.
Rails 3.2로 업그레이드하기
기존 애플리케이션을 업그레이드하는 경우, 업데이트를 시작하기 전에 충분한 테스트 커버리지를 확보하는 것이 좋습니다. 먼저 Rails 3.1로 업그레이드하고 애플리케이션이 여전히 예상대로 작동하는지 확인한 후에 Rails 3.2로 업데이트를 시도해야 합니다. 그리고 다음과 같은 변경 사항에 유의하세요:
Rails 3.2는 최소 Ruby 1.8.7 이상 필요
Rails 3.2는 Ruby 1.8.7 이상을 요구합니다. 이전 버전의 Ruby에 대한 지원이 공식적으로 중단되었으므로 가능한 빨리 업그레이드해야 합니다. Rails 3.2는 Ruby 1.9.2와도 호환됩니다.
팁: Ruby 1.8.7 p248 및 p249에는 마샬링 버그가 있어 Rails가 충돌할 수 있습니다. Ruby Enterprise Edition에서는 이 문제가 1.8.7-2010.02 릴리스부터 해결되었습니다. 1.9.x 버전에서는 Ruby 1.9.1이 세그먼테이션 오류로 인해 사용할 수 없으므로, 1.9.x를 사용하려면 1.9.2 또는 1.9.3으로 전환하는 것이 좋습니다.
애플리케이션에서 업데이트해야 할 사항
Gemfile
을 다음과 같이 업데이트:rails = 3.2.0
sass-rails ~> 3.2.3
coffee-rails ~> 3.2.1
uglifier >= 1.0.3
Rails 3.2는
vendor/plugins
를 사용하지 않으며, Rails 4.0에서는 완전히 제거될 예정입니다. 이러한 플러그인을 대신 gem으로 추출하거나Gemfile
에 경로 또는 Git 종속성으로 추가할 수 있습니다. gem으로 만들지 않으려면lib/my_plugin/*
에 이동시키고 적절한 초기화기를config/initializers/my_plugin.rb
에 추가할 수 있습니다.config/environments/development.rb
에 다음과 같은 새로운 구성 변경 사항을 추가해야 합니다:# Active Record 모델에 대한 대량 할당 보호 예외 발생 config.active_record.mass_assignment_sanitizer = :strict # 0.5초 이상 걸리는 쿼리에 대해 쿼리 계획 로깅(SQLite, MySQL, PostgreSQL 지원) config.active_record.auto_explain_threshold_in_seconds = 0.5
mass_assignment_sanitizer
구성은config/environments/test.rb
에도 추가해야 합니다:# Active Record 모델에 대한 대량 할당 보호 예외 발생 config.active_record.mass_assignment_sanitizer = :strict
엔진에서 업데이트해야 할 사항
script/rails
의 주석 아래 코드를 다음 내용으로 바꿉니다:
ENGINE_ROOT = File.expand_path('../..', __FILE__) ENGINE_PATH = File.expand_path('../../lib/your_engine_name/engine', __FILE__) require "rails/all" require "rails/engine/commands"
Rails 3.2 애플리케이션 만들기
# 'rails' RubyGem이 설치되어 있어야 합니다 $ rails new myapp $ cd myapp
젬 포함하기
Rails는 이제 애플리케이션 루트의 Gemfile
을 사용하여 애플리케이션에 필요한 젬을 결정합니다. 이 Gemfile
은 Bundler 젬에 의해 처리되며, 모든 종속성을 설치합니다. 심지어 시스템 젬에 의존하지 않고 애플리케이션에 로컬로 모든 종속성을 설치할 수 있습니다.
더 자세한 정보: Bundler 홈페이지
최신 버전 사용하기
Bundler
와 Gemfile
을 사용하면 새로운 전용 bundle
명령으로 Rails 애플리케이션을 쉽게 동결할 수 있습니다. Git 저장소에서 직접 번들링하려면 --edge
플래그를 전달하면 됩니다:
$ rails new myapp --edge
Rails 저장소의 로컬 체크아웃을 사용하여 애플리케이션을 생성하려면 --dev
플래그를 전달하면 됩니다:
$ ruby /path/to/rails/railties/bin/rails new myapp --dev
주요 기능
더 빠른 개발 모드 및 라우팅
Rails 3.2에는 눈에 띄게 빨라진 개발 모드가 포함되어 있습니다. Active Reload에서 영감을 받아, Rails는 실제로 파일이 변경된 경우에만 클래스를 다시 로드합니다. 이를 통해 대규모 애플리케이션에서 성능이 크게 향상됩니다. 라우트 인식 또한 새로운 Journey 엔진 덕분에 훨씬 빨라졌습니다.
자동 쿼리 설명
Rails 3.2에는 Arel이 생성한 쿼리를 설명하는 편리한 기능이 포함되어 있습니다. ActiveRecord::Relation
에 explain
메서드를 정의하면 됩니다. 예를 들어 puts Person.active.limit(5).explain
을 실행하면 Arel이 생성한 쿼리가 설명됩니다. 이를 통해 적절한 인덱스와 추가 최적화 방법을 확인할 수 있습니다.
0.5초 이상 걸리는 쿼리는 개발 모드에서 자동으로 설명됩니다. 물론 이 임계값은 변경할 수 있습니다.
태그 로깅
다중 사용자, 다중 계정 애플리케이션을 실행할 때 로그를 누가 어떤 작업을 했는지 필터링할 수 있다면 디버깅에 큰 도움이 됩니다. Active Support의 TaggedLogging은 하위 도메인, 요청 ID 등을 로그 라인에 스탬프하여 이를 가능하게 합니다.
문서화
Rails 3.2부터 Rails 가이드를 Kindle과 iPad, iPhone, Mac, Android 등의 무료 Kindle 앱에서 사용할 수 있습니다.
Railties
종속성 파일이 변경된 경우에만 클래스를 다시 로드하여 개발 속도를 높였습니다.
config.reload_classes_only_on_change
를 false로 설정하면 이 기능을 끌 수 있습니다.새 애플리케이션에는
config/environments/development.rb
에config.active_record.auto_explain_threshold_in_seconds
플래그가 추가되었습니다. 이 값은 0.5로 설정되며,config/environments/production.rb
에서는 주석 처리되어 있습니다.config/environments/test.rb
에는 언급되지 않습니다.config.exceptions_app
을 추가하여 예외가 발생할 때 호출되는 예외 애플리케이션을 설정할 수 있습니다. 기본값은ActionDispatch::PublicExceptions.new(Rails.public_path)
입니다.예외 처리 기능이
ShowExceptions
미들웨어에서 추출되어DebugExceptions
미들웨어로 이동했습니다.rake routes
에서 마운트된 엔진의 라우트를 표시합니다.config.railties_order
를 사용하여 railties의 로딩 순서를 변경할 수 있습니다:config.railties_order = [Blog::Engine, :main_app, :all]
API 요청에 대해 콘텐츠 없이 204 No Content를 반환하도록 scaffold를 변경했습니다. 이를 통해 jQuery와 함께 scaffold가 원활하게 작동합니다.
Rails::Rack::Logger
미들웨어를 업데이트하여config.log_tags
에 설정된 태그를ActiveSupport::TaggedLogging
에 적용합니다. 이를 통해 하위 도메인 및 요청 ID와 같은 디버그 정보를 로그 라인에 쉽게 태그할 수 있습니다. 이는 다중 사용자 프로덕션 애플리케이션 디버깅에 매우 유용합니다.rails new
의 기본 옵션은~/.railsrc
에서 설정할 수 있습니다. 홈 디렉토리의.railsrc
구성 파일에서rails new
를 실행할 때마다 사용할 추가 명령줄 인수를 지정할 수 있습니다.destroy
명령에 대한 별칭d
를 추가했습니다. 이는 엔진에서도 작동합니다.scaffold와 모델 생성기의 속성 기본값이 문자열로 설정되었습니다. 다음과 같은 명령이 가능합니다:
bin/rails g scaffold Post title body:text author
scaffold/model/migration 생성기에서 “index” 및 “uniq” 수식어를 허용합니다. 예를 들어,
$ bin/rails g scaffold Post title:string:index author:uniq price:decimal{7,2}
이렇게 하면
title
에 인덱스가,author
에 고유 인덱스가 생성됩니다. 일부 유형(예: decimal)은 사용자 지정 옵션을 허용합니다. 예에서price
는 정밀도와 스케일이 각각 7과 2로 설정된 decimal 열이 됩니다.Gemfile
의 기본값에서 turn 젬이 제거되었습니다.rails generate plugin
명령 대신rails plugin new
명령을 사용하도록 변경되었습니다.config.paths.app.controller
API 대신config.paths["app/controller"]
를 사용하도록 변경되었습니다.
사용 중단
Rails::Plugin
은 사용 중단되었으며 Rails 4.0에서 완전히 제거될 예정입니다.vendor/plugins
에 플러그인을 추가하는 대신 젬을 사용하거나 경로 또는 Git 종속성을 사용하여Gemfile
에 추가하세요.
Action Mailer
mail
버전이 2.4.0으로 업그레이드되었습니다.Rails 3.0부터 사용 중단된 이전 Action Mailer API가 제거되었습니다.
Action Pack
Action Controller
ActiveSupport::Benchmarkable
을ActionController::Base
의 기본 모듈로 추가하여 컨트롤러 컨텍스트에서#benchmark
메서드를 다시 사용할 수 있게 되었습니다.caches_page
에:gzip
옵션을 추가했습니다. 기본 옵션은page_cache_compression
을 사용하여 전역적으로 구성할 수 있습니다.Rails는 이제
:only
및:except
조건을 지정하고 해당 조건이 실패할 경우 기본 레이아웃(예: “layouts/application”)을 사용합니다.class CarsController layout 'single_car', :only => :show end
show
작업에 대한 요청이네, 번역을 계속하겠습니다.
Action Pack
Action Controller
Rails는 이제
:only
및:except
조건을 지정하고 해당 조건이 실패할 경우 기본 레이아웃(예: “layouts/application”)을 사용합니다.class CarsController layout 'single_car', :only => :show end
show
작업에 대한 요청이 들어오면layouts/single_car
를 사용하고, 다른 작업에 대한 요청이 들어오면layouts/application
(또는layouts/cars
가 있는 경우 해당 레이아웃)을 사용합니다.form_for
에서:as
옵션이 제공되면 CSS 클래스와 ID가#{action}_#{as}
로 변경되었습니다. 이전 버전에서는#{as}_#{action}
을 사용했습니다.ActionController::ParamsWrapper
가 Active Record 모델에 적용될 때attr_accessible
로 설정된 속성만 래핑합니다. 그렇지 않으면attribute_names
클래스 메서드가 반환하는 속성만 래핑됩니다. 이를 통해 중첩된 속성도attr_accessible
에 추가하면 올바르게 래핑됩니다.콜백이 렌더링하거나 리디렉션하여 필터 체인이 중단될 때마다 “Filter chain halted as CALLBACKNAME rendered or redirected"를 로그합니다.
ActionDispatch::ShowExceptions
가 리팩토링되었습니다. 컨트롤러가 예외를 표시할지 여부를 선택합니다.show_detailed_exceptions?
를 컨트롤러에서 재정의하여 어떤 요청에 디버깅 정보를 제공할지 지정할 수 있습니다.Responder는 이제 응답 본문이 없는 API 요청에 대해 204 No Content를 반환합니다(새로운 scaffold와 같이).
ActionController::TestCase
쿠키가 리팩토링되었습니다. 테스트 케이스에서 쿠키를 할당할 때는cookies[]
를 사용해야 합니다.cookies[:email] = 'user@example.com' get :index assert_equal 'user@example.com', cookies[:email]
쿠키를 지우려면
clear
를 사용합니다.cookies.clear get :index assert_nil cookies[:email]
이제 더 이상 HTTP_COOKIE를 작성하지 않으며, 쿠키 저장소가 요청 간에 지속되므로 테스트를 위해 환경을 조작해야 하는 경우 쿠키 저장소가 생성되기 전에 수행해야 합니다.
send_file
은 이제:type
이 제공되지 않으면 파일 확장자에서 MIME 유형을 추측합니다.PDF, ZIP 및 기타 형식에 대한 MIME 유형 항목이 추가되었습니다.
fresh_when/stale?
에서 옵션 해시 대신 레코드를 사용할 수 있습니다.CSRF 토큰 누락에 대한 경고 로그 수준이
:debug
에서:warn
으로 변경되었습니다.자산은 기본적으로 요청 프로토콜을 사용하거나 요청이 없는 경우 상대적으로 기본 설정됩니다.
사용 중단
부모가 명시적인 레이아웃을 설정한 경우 컨트롤러의 암시적 레이아웃 조회가 사용 중단되었습니다:
class ApplicationController layout "application" end class PostsController < ApplicationController end
위의 예에서
PostsController
는 더 이상 자동으로 posts 레이아웃을 찾지 않습니다. 이 기능이 필요한 경우ApplicationController
에서layout "application"
을 제거하거나PostsController
에서 명시적으로nil
로 설정해야 합니다.ActionController::UnknownAction
이AbstractController::ActionNotFound
로 사용 중단되었습니다.ActionController::DoubleRenderError
가AbstractController::DoubleRenderError
로 사용 중단되었습니다.누락된 작업에 대해
method_missing
대신action_missing
을 사용하도록 사용 중단되었습니다.ActionController#rescue_action
,ActionController#initialize_template_class
,ActionController#assign_shortcuts
가 사용 중단되었습니다.
Action Dispatch
config.action_dispatch.default_charset
를 추가하여ActionDispatch::Response
의 기본 문자 집합을 구성할 수 있습니다.ActionDispatch::RequestId
미들웨어를 추가하여 응답에 고유한 X-Request-Id 헤더를 사용할 수 있게 하고ActionDispatch::Request#uuid
메서드를 활성화했습니다. 이를 통해 스택 전체에서 요청을 추적하고 혼합 로그(예: Syslog)에서 개별 요청을 식별할 수 있습니다.ShowExceptions
미들웨어는 이제 애플리케이션 실패 시 예외를 렌더링하는 예외 애플리케이션을 허용합니다. 애플리케이션은env["action_dispatch.exception"]
에 복사된 예외와 상태 코드로 재작성된PATH_INFO
로 호출됩니다.config.action_dispatch.rescue_responses
를 통해 railtie에서 구조화된 예외 응답을 구성할 수 있습니다.
사용 중단
- 컨트롤러 수준에서 기본 문자 집합을 설정하는 기능이 사용 중단되었습니다. 대신 새로운
config.action_dispatch.default_charset
를 사용하세요.
Action View
ActionView::Helpers::FormBuilder
에button_tag
지원이 추가되었습니다. 이 지원은submit_tag
의 기본 동작을 모방합니다.<%= form_for @post do |f| %> <%= f.button %> <% end %>
날짜 도우미가
:use_two_digit_numbers => true
옵션을 허용하여 월과 일을 선행 0으로 렌더링하되 해당 값은 변경하지 않습니다. 예를 들어 ISO 8601 스타일의 날짜를 표시하는 데 유용합니다.폼의 고유성을 보장하기 위해 네임스페이스를 제공할 수 있습니다. 생성된 HTML id 속성에 밑줄이 추가됩니다.
<%= form_for(@offer, :namespace => 'namespace') do |f| %> <%= f.label :version, 'Version' %>: <%= f.text_field :version %> <% end %>
select_year
의 옵션 수를 1000으로 제한했습니다.:max_years_allowed
옵션을 사용하여 사용자 지정 제한을 설정할 수 있습니다.content_tag_for
및div_for
에서 레코드 컬렉션을 제공할 수 있습니다. 블록에 수신 인수를 설정하면 첫 번째 인수로 레코드가 전달됩니다. 따라서 다음과 같이 할 필요가 없습니다:@items.each do |item| content_tag_for(:li, item) do Title: <%= item.title %> end end
대신 다음과 같이 할 수 있습니다:
content_tag_for(:li, @items) do |item| Title: <%= item.title %> end
font_path
도우미 메서드를 추가하여public/fonts
의 글꼴 자산 경로를 계산합니다.
사용 중단
render :template
와 같은 메서드에 형식 또는 핸들러를 전달하는 것이 사용 중단되었습니다. 대신:handlers
및:formats
를 직접 옵션으로 제공할 수 있습니다:render :template => "foo", :formats => [:html, :js], :handlers => :erb
.
Sprockets
config.assets.logger
구성 옵션을 추가하여 Sprockets 로깅을 제어할 수 있습니다.false
로 설정하면 로깅이 비활성화되고nil
로 설정하면Rails.logger
의 기본값을 사용합니다.
Active Record
‘on’ 및 ‘ON’ 값을 가진 부울 열이 true로 변환됩니다.
timestamps
메서드가created_at
및updated_at
열을 생성할 때 기본적으로 null 허용이 불가능하도록 설정합니다.ActiveRecord::Relation#explain
을 구현했습니다.ActiveRecord::Base.silence_auto_explain
을 구현하여 사용자가 블록 내에서 선택적으로 자동 EXPLAIN을 비활성화할 수 있습니다.느린 쿼리에 대한 자동 EXPLAIN 로깅을 구현했습니다. 새로운 구성 매개변수
config.active_record.auto_explain_threshold_in_seconds
는 느린 쿼리로 간주되는 기준을 결정합니다. 이 값을 nil로 설정하면 이 기능이 비활성화됩니다. 기본값은 개발 모드에서 0.5, 테스트 및 프로덕션 모드에서 nil입니다. Rails 3.2는 SQLite, MySQL(mysql2 어댑터), PostgreSQL에서 이 기능을 지원합니다.ActiveRecord::Base.store
를 추가하여 간단한 단일 열 키/값 저장소를 선언할 수 있습니다.class User < ActiveRecord::Base store :settings, accessors: [ :color, :homepage ] end u = User.new(color: 'black', homepage: '37signals.com') u.color # Accessor stored attribute u.settings[:country] = 'Denmark' # 액세서로 지정되지 않은 속성도 저장 가능
주어진 범위에 대해서만 마이그레이션을 실행할 수 있는 기능을 추가했습니다. 이를 통해 엔진에서 변경 사항을 되돌리는 등 엔진별로 마이그레이션을 실행할 수 있습니다.
rake db:migrate SCOPE=blog
엔진에서 복사된 마이그레이션은 이제 엔진 이름으로 범위가 지정됩니다. 예:
01_create_posts.blog.rb
.ActiveRecord::Relation#pluck
메서드를 구현하여 기본 테이블에서 직접 열 값의 배열을 반환합니다. 직렬화된 속성에서도 작동합니다.Client.where(:active => true).pluck(:id) # SELECT id from clients where active = 1
생성된 연관 메서드는 별도의 모듈에서 생성되어 오버라이드와 구성이 가능합니다. MyModel이라는 클래스의 경우 모듈 이름은
MyModel::GeneratedFeatureMethods
입니다. Active Model에 정의된generated_attributes_methods
모듈 바로 다음에 포함되므로 연관 메서드가 동일한 이름의 속성 메서드를 재정의할 수 있습니다.ActiveRecord::Relation#uniq
를 추가하여 고유한 쿼리를 생성할 수 있습니다.Client.select('DISTINCT name')
이는 다음과 같이 작성할 수 있습니다:
Client.select(:name).uniq
또한 관계의 고유성을 되돌릴 수 있습니다:
Client.select(:name).uniq.uniq(false)
SQLite, MySQL, PostgreSQL 어댑터에서 인덱스 정렬 순서를 지원합니다.
연관 관계의
:class_name
옵션에 문자열 대신 기호를 사용할 수 있습니다. 이는 초보자들의 혼란을 방지하고 다른 옵션(예::foreign_key
)이 이미 기호 또는 문자열을 허용하는 것과 일관성을 유지하기 위함입니다.has_many :clients, :class_name => :Client # 기호는 대문자로 작성해야 합니다
개네, 번역을 계속하겠습니다.
Active Record
개발 모드에서
db:drop
은 테스트 데이터베이스도 삭제하여db:create
와 대칭성을 유지합니다.대소문자를 구분하지 않는 고유성 검증은 MySQL에서 열이 이미 대소문자를 구분하지 않는 콜레이션을 사용하는 경우 LOWER를 호출하지 않습니다.
트랜잭셔널 픽스처는 모든 활성 데이터베이스 연결을 등록합니다. 다른 연결에서 모델을 테스트할 수 있으며 트랜잭셔널 픽스처를 비활성화할 필요가 없습니다.
Active Record에
first_or_create
,first_or_create!
,first_or_initialize
메서드를 추가했습니다. 이는 레코드를 찾거나 생성하는 동적 메서드인find_or_create_by
보다 더 명확한 접근 방식입니다.User.where(:first_name => "Scarlett").first_or_create!(:last_name => "Johansson")
Active Record 객체에
with_lock
메서드를 추가했습니다. 이 메서드는 트랜잭션을 시작하고, 객체를 (비관적으로) 잠그며, 블록을 실행합니다. 이 메서드는 선택적으로 하나의 매개변수를 받아lock!
에 전달합니다.이를 통해 다음과 같이 작성할 수 있습니다:
class Order < ActiveRecord::Base def cancel! transaction do lock! # ... 취소 로직 end end end
대신 다음과 같이 작성할 수 있습니다:
class Order < ActiveRecord::Base def cancel! with_lock do # ... 취소 로직 end end end
사용 중단
스레드의 연결 자동 종료가 사용 중단되었습니다. 예를 들어 다음 코드는 사용 중단되었습니다:
Thread.new { Post.find(1) }.join
대신 다음과 같이 스레드 종료 시 데이터베이스 연결을 닫아야 합니다:
Thread.new { Post.find(1) Post.connection.close }.join
스레드를 생성하는 애플리케이션 코드만 이 변경 사항에 신경 써야 합니다.
set_table_name
,set_inheritance_column
,set_sequence_name
,set_primary_key
,set_locking_column
메서드가 사용 중단되었습니다. 대신 할당 메서드를 사용하세요. 예를 들어set_table_name
대신self.table_name=
을 사용합니다.class Project < ActiveRecord::Base self.table_name = "project" end
또는 자체
self.table_name
메서드를 정의할 수 있습니다:class Post < ActiveRecord::Base def self.table_name "special_" + super end end Post.table_name # => "special_posts"
Active Model
ActiveModel::Errors#added?
를 추가하여 특정 오류가 추가되었는지 확인할 수 있습니다.strict => true
로 엄격한 유효성 검사를 정의할 수 있습니다. 이 경우 유효성 검사에 실패하면 예외가 발생합니다.mass_assignment_sanitizer
를 통해 sanitizer 동작을 쉽게 변경할 수 있는 API를 제공합니다.:logger
(기본값) 및:strict
sanitizer 동작도 지원합니다.
사용 중단
Active Record의 메서드 같은
define_attr_method
가 사용 중단되었습니다. 이는set_table_name
과 같은 메서드를 지원하기 위해 존재했으며, 이러한 메서드 자체도 사용 중단되고 있습니다.Model.model_name.partial_path
가model.to_partial_path
로 사용 중단되었습니다.
Active Resource
- 리디렉션 응답: 303 See Other와 307 Temporary Redirect가 이제 301 Moved Permanently와 302 Found과 같이 동작합니다.
Active Support
ActiveSupport:TaggedLogging
을 추가하여 표준Logger
클래스를 래핑하고 태깅 기능을 제공합니다.Logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT)) Logger.tagged("BCX") { Logger.info "Stuff" } # "[BCX] Stuff"를 로그 Logger.tagged("BCX", "Jason") { Logger.info "Stuff" } # "[BCX] [Jason] Stuff"를 로그 Logger.tagged("BCX") { Logger.tagged("Jason") { Logger.info "Stuff" } } # "[BCX] [Jason] Stuff"를 로그
Date
,Time
,DateTime
의beginning_of_week
메서드에 주 시작일을 나타내는 선택적 인수를 추가했습니다.ActiveSupport::Notifications.subscribed
를 통해 블록 실행 중 이벤트 구독을 제공합니다.Module#qualified_const_defined?
,Module#qualified_const_get
,Module#qualified_const_set
을 정의하여 표준 API의 해당 메서드와 유사하지만 정규화된 상수 이름을 허용합니다.#deconstantize
를 추가하여#demodulize
를 보완합니다. 이 메서드는 정규화된 상수 이름의 가장 오른쪽 세그먼트를 제거합니다.상수화할 수 없는 경우 예외 대신
nil
을 반환하는safe_constantize
를 추가했습니다.ActiveSupport::OrderedHash
가Array#extract_options!
에서 추출 가능하도록 표시되었습니다.Array#prepend
를Array#unshift
의 별칭으로,Array#append
를Array#<<
의 별칭으로 추가했습니다.Ruby 1.9에서 빈 문자열의 정의가 유니코드 공백까지 확장되었습니다. 또한 Ruby 1.8에서는 이상적 공간 U`3000도 공백으로 간주됩니다.
이너터는 두문자어를 이해합니다.
Time#all_day
,Time#all_week
,Time#all_quarter
,Time#all_year
를 추가하여 범위를 생성할 수 있습니다.Event.where(:created_at => Time.now.all_week) Event.where(:created_at => Time.now.all_day)
Class#cattr_accessor
및 관련 메서드에instance_accessor: false
옵션을 추가했습니다.블록에 매개변수를 스플릿하여 전달할 때
ActiveSupport::OrderedHash#each
와#each_pair
의 동작이 달라졌습니다.개발 및 테스트에 사용할
ActiveSupport::Cache::NullStore
를 추가했습니다.표준 라이브러리의
SecureRandom
을 사용하도록ActiveSupport::SecureRandom
을 제거했습니다.
사용 중단
ActiveSupport::Base64
가::Base64
로 사용 중단되었습니다.ActiveSupport::Memoizable
이 Ruby 메모이제이션 패턴으로 사용 중단되었습니다.Module#synchronize
가 대체 없이 사용 중단되었습니다. 표준 라이브러리의 모니터를 사용하세요.ActiveSupport::MessageEncryptor#encrypt
와ActiveSupport::MessageEncryptor#decrypt
가 사용 중단되었습니다.ActiveSupport::BufferedLogger#silence
가 사용 중단되었습니다. 특정 블록에 대해 로그를 억제하려면 해당 블록의 로그 수준을 변경하세요.ActiveSupport::BufferedLogger#open_log
가 사용 중단되었습니다. 이 메서드는 본래 공개되지 않았어야 합니다.ActiveSupport::BufferedLogger
의 로그 파일 자동 생성 동작이 사용 중단되었습니다. 로그 파일의 디렉토리를 직접 생성해야 합니다.ActiveSupport::BufferedLogger#auto_flushing
이 사용 중단되었습니다. 기본 파일 핸들의 동기화 수준을 설정하거나 파일 시스템을 튜닝하세요. FS 캐시가 이제 플러싱을 제어합니다.f = File.open('foo.log', 'w') f.sync = true ActiveSupport::BufferedLogger.new f
ActiveSupport::BufferedLogger#flush
가 사용 중단되었습니다. 파일 핸들의 동기화를 설정하거나 파일 시스템을 튜닝하세요.
크레딧
Rails에 많은 시간을 보내 만든 많은 사람들의 전체 목록은 Rails 기여자 목록을 참조하세요. 모든 분들께 박수를 보냅니다.
Rails 3.2 릴리스 노트는 Vijay Dev가 작성했습니다.