1 Mise à niveau vers Rails 3.2
Si vous mettez à niveau une application existante, il est conseillé d'avoir une bonne couverture de tests avant de commencer. Vous devriez également d'abord passer à Rails 3.1 au cas où vous ne l'auriez pas déjà fait et vous assurer que votre application fonctionne toujours comme prévu avant de tenter une mise à jour vers Rails 3.2. Ensuite, tenez compte des changements suivants :
1.1 Rails 3.2 nécessite au moins Ruby 1.8.7
Rails 3.2 nécessite Ruby 1.8.7 ou une version supérieure. Le support de toutes les versions précédentes de Ruby a été officiellement abandonné et vous devriez effectuer la mise à niveau dès que possible. Rails 3.2 est également compatible avec Ruby 1.9.2.
CONSEIL : Notez que les versions p248 et p249 de Ruby 1.8.7 ont des bugs de sérialisation qui font planter Rails. Ruby Enterprise Edition les a corrigés depuis la version 1.8.7-2010.02. Du côté de Ruby 1.9, la version 1.9.1 n'est pas utilisable car elle plante carrément, donc si vous voulez utiliser 1.9.x, passez directement à 1.9.2 ou 1.9.3 pour une utilisation sans problème.
1.2 Ce qu'il faut mettre à jour dans vos applications
Mettez à jour votre
Gemfile
pour dépendre derails = 3.2.0
sass-rails ~> 3.2.3
coffee-rails ~> 3.2.1
uglifier >= 1.0.3
Rails 3.2 déprécie
vendor/plugins
et Rails 4.0 les supprimera complètement. Vous pouvez commencer à remplacer ces plugins en les extrayant en tant que gems et en les ajoutant à votreGemfile
. Si vous choisissez de ne pas les transformer en gems, vous pouvez les déplacer dans, par exemple,lib/my_plugin/*
et ajouter un initialiseur approprié dansconfig/initializers/my_plugin.rb
.Il y a quelques nouveaux changements de configuration que vous voudrez ajouter dans
config/environments/development.rb
:# Lever une exception en cas de protection contre les affectations massives pour les modèles Active Record config.active_record.mass_assignment_sanitizer = :strict # Journaliser le plan de requête pour les requêtes prenant plus de temps que cela (fonctionne # avec SQLite, MySQL et PostgreSQL) config.active_record.auto_explain_threshold_in_seconds = 0.5
La configuration
mass_assignment_sanitizer
doit également être ajoutée dansconfig/environments/test.rb
:# Lever une exception en cas de protection contre les affectations massives pour les modèles Active Record config.active_record.mass_assignment_sanitizer = :strict
1.3 Ce qu'il faut mettre à jour dans vos moteurs
Remplacez le code sous le commentaire dans script/rails
par le contenu suivant :
ENGINE_ROOT = File.expand_path('../..', __FILE__)
ENGINE_PATH = File.expand_path('../../lib/your_engine_name/engine', __FILE__)
require "rails/all"
require "rails/engine/commands"
2 Création d'une application Rails 3.2
# Vous devez avoir le gem 'rails' installé
$ rails new myapp
$ cd myapp
2.1 Vendre des gems
Rails utilise maintenant un Gemfile
à la racine de l'application pour déterminer les gems dont vous avez besoin pour démarrer votre application. Ce Gemfile
est traité par le gem Bundler, qui installe ensuite toutes vos dépendances. Il peut même installer toutes les dépendances localement à votre application afin qu'elle ne dépende pas des gems système.
Plus d'informations : Page d'accueil de Bundler
2.2 Vivre à la pointe
Bundler
et Gemfile
facilitent la congélation de votre application Rails avec la nouvelle commande bundle
dédiée. Si vous souhaitez regrouper directement à partir du référentiel Git, vous pouvez passer le drapeau --edge
:
$ rails new myapp --edge
Si vous avez une copie locale du référentiel Rails et que vous souhaitez générer une application à partir de celui-ci, vous pouvez passer le drapeau --dev
:
$ ruby /chemin/vers/rails/railties/bin/rails new myapp --dev
3 Fonctionnalités majeures
3.1 Mode de développement plus rapide et routage
Rails 3.2 est livré avec un mode de développement nettement plus rapide. Inspiré par Active Reload, Rails recharge les classes uniquement lorsque les fichiers changent réellement. Les gains de performances sont spectaculaires sur une application plus importante. La reconnaissance des routes est également beaucoup plus rapide grâce au nouveau moteur Journey.
3.2 Explications automatiques des requêtes
Rails 3.2 est livré avec une fonctionnalité intéressante qui explique les requêtes générées par Arel en définissant une méthode explain
dans ActiveRecord::Relation
. Par exemple, vous pouvez exécuter quelque chose comme puts Person.active.limit(5).explain
et la requête produite par Arel est expliquée. Cela permet de vérifier les index appropriés et d'effectuer d'autres optimisations.
Les requêtes qui prennent plus d'une demi-seconde à s'exécuter sont automatiquement expliquées en mode développement. Bien sûr, ce seuil peut être modifié.
3.3 Journalisation étiquetée
Lors de l'exécution d'une application multi-utilisateurs et multi-comptes, il est très utile de pouvoir filtrer les journaux en fonction de l'utilisateur. TaggedLogging dans Active Support aide à faire exactement cela en marquant les lignes de journal avec des sous-domaines, des identifiants de requête et tout ce qui peut aider au débogage de telles applications.
4 Documentation
À partir de Rails 3.2, les guides Rails sont disponibles pour Kindle et les applications de lecture Kindle gratuites pour iPad, iPhone, Mac, Android, etc.
5 Railties
Accélérer le développement en rechargeant uniquement les classes si les fichiers de dépendances ont changé. Cela peut être désactivé en définissant
config.reload_classes_only_on_change
sur false.Les nouvelles applications obtiennent un indicateur
config.active_record.auto_explain_threshold_in_seconds
dans les fichiers de configuration des environnements. Avec une valeur de0.5
dansdevelopment.rb
et commenté dansproduction.rb
. Aucune mention danstest.rb
.Ajout de
config.exceptions_app
pour définir l'application d'exceptions invoquée par le middlewareShowException
lorsqu'une exception se produit. Par défaut, il est défini surActionDispatch::PublicExceptions.new(Rails.public_path)
.Ajout d'un middleware
DebugExceptions
qui contient des fonctionnalités extraites du middlewareShowExceptions
.Afficher les routes des moteurs montés dans
rake routes
.Permet de modifier l'ordre de chargement des railties avec
config.railties_order
comme suit :config.railties_order = [Blog::Engine, :main_app, :all]
Scaffold renvoie 204 No Content pour les requêtes API sans contenu. Cela permet à scaffold de fonctionner avec jQuery dès le départ.
Mise à jour du middleware
Rails::Rack::Logger
pour appliquer les balises définies dansconfig.log_tags
àActiveSupport::TaggedLogging
. Cela permet de marquer les lignes de journal avec des informations de débogage telles que le sous-domaine et l'identifiant de requête - toutes deux très utiles pour le débogage des applications de production multi-utilisateurs.Les options par défaut de
rails new
peuvent être définies dans~/.railsrc
. Vous pouvez spécifier des arguments supplémentaires à utiliser à chaque exécution derails new
dans le fichier de configuration.railsrc
de votre répertoire personnel.Ajout d'un alias
d
pourdestroy
. Cela fonctionne également pour les moteurs.Les attributs des générateurs de scaffold et de modèle sont par défaut de type string. Cela permet de faire ce qui suit :
bin/rails g scaffold Post title body:text author
Les générateurs de scaffold/modèle/migration acceptent désormais les modificateurs "index" et "uniq". Par exemple,
bin/rails g scaffold Post title:string:index author:uniq price:decimal{7,2}
créera des index pour
title
etauthor
, ce dernier étant un index unique. Certains types tels que decimal acceptent des options personnalisées. Dans l'exemple,price
sera une colonne décimale avec une précision de 7 et une échelle de 2.La gemme Turn a été supprimée du fichier
Gemfile
par défaut.Suppression de l'ancien générateur de plugins
rails generate plugin
au profit de la commanderails plugin new
.Suppression de l'ancienne API
config.paths.app.controller
au profit deconfig.paths["app/controller"]
.
5.1 Dépréciations
Rails::Plugin
est déprécié et sera supprimé dans Rails 4.0. Au lieu d'ajouter des plugins àvendor/plugins
, utilisez des gemmes ou Bundler avec des dépendances de chemin ou de git.
6 Action Mailer
Mise à jour de la version de
mail
à 2.4.0.Suppression de l'ancienne API Action Mailer qui était dépréciée depuis Rails 3.0.
7 Action Pack
7.1 Action Controller
Fait de
ActiveSupport::Benchmarkable
un module par défaut pourActionController::Base
, de sorte que la méthode#benchmark
soit à nouveau disponible dans le contexte du contrôleur comme elle l'était auparavant.Ajout de l'option
:gzip
àcaches_page
. L'option par défaut peut être configurée globalement en utilisantpage_cache_compression
.Rails utilisera désormais votre mise en page par défaut (comme "layouts/application") lorsque vous spécifiez une mise en page avec les conditions
:only
et:except
, et que ces conditions échouent.class CarsController layout 'single_car', :only => :show end
Rails utilisera
layouts/single_car
lorsqu'une requête arrive dans l'action:show
, et utiliseralayouts/application
(oulayouts/cars
, s'il existe) lorsqu'une requête arrive pour toute autre action.form_for
est modifié pour utiliser#{action}_#{as}
comme classe CSS et id si l'option:as
est fournie. Les versions précédentes utilisaient#{as}_#{action}
.ActionController::ParamsWrapper
sur les modèles Active Record ne wrappe désormais que les attributsattr_accessible
s'ils sont définis. Sinon, seuls les attributs retournés par la méthode de classeattribute_names
seront wrappés. Cela corrige le wrapping des attributs imbriqués en les ajoutant àattr_accessible
.Journaliser "Filter chain halted as CALLBACKNAME rendered or redirected" chaque fois qu'un rappel avant arrête le processus.
Refonte de
ActionDispatch::ShowExceptions
. Le contrôleur est responsable du choix d'afficher les exceptions. Il est possible de remplacershow_detailed_exceptions?
dans les contrôleurs pour spécifier quelles requêtes doivent fournir des informations de débogage sur les erreurs.Les répondeurs renvoient désormais 204 No Content pour les requêtes API sans corps de réponse (comme dans le nouveau scaffold).
Refonte des cookies de
ActionController::TestCase
. L'attribution des cookies pour les cas de test doit désormais utilisercookies[]
.ruby cookies[:email] = '[email protected]' get :index assert_equal '[email protected]', cookies[:email]
Pour effacer les cookies, utilisez clear
.
cookies.clear
get :index
assert_nil cookies[:email]
Nous n'écrivons plus HTTP_COOKIE et le cookie jar est persistant entre les requêtes, donc si vous avez besoin de manipuler l'environnement pour votre test, vous devez le faire avant la création du cookie jar.
send_file
devine maintenant le type MIME à partir de l'extension du fichier si:type
n'est pas fourni.Des entrées de type MIME pour les formats PDF, ZIP et autres ont été ajoutées.
Permettre à
fresh_when/stale?
de prendre un enregistrement au lieu d'un hachage d'options.Niveau de journalisation de l'avertissement pour le jeton CSRF manquant changé de
:debug
à:warn
.Les ressources doivent utiliser le protocole de la requête par défaut ou être relatives par défaut si aucune requête n'est disponible.
7.1.1 Dépréciations
- Recherche de mise en page implicite dépréciée dans les contrôleurs dont le parent avait une mise en page explicite définie :
class ApplicationController
layout "application"
end
class PostsController < ApplicationController
end
Dans l'exemple ci-dessus, PostsController
ne recherchera plus automatiquement une mise en page pour les posts. Si vous avez besoin de cette fonctionnalité, vous pouvez soit supprimer layout "application"
de ApplicationController
, soit le définir explicitement sur nil
dans PostsController
.
ActionController::UnknownAction
déprécié au profit deAbstractController::ActionNotFound
.ActionController::DoubleRenderError
déprécié au profit deAbstractController::DoubleRenderError
.method_missing
déprécié au profit deaction_missing
pour les actions manquantes.ActionController#rescue_action
,ActionController#initialize_template_class
etActionController#assign_shortcuts
dépréciés.
7.2 Action Dispatch
Ajout de
config.action_dispatch.default_charset
pour configurer le jeu de caractères par défaut pourActionDispatch::Response
.Ajout du middleware
ActionDispatch::RequestId
qui rend un en-tête X-Request-Id unique disponible pour la réponse et active la méthodeActionDispatch::Request#uuid
. Cela facilite le suivi des requêtes de bout en bout dans la pile et l'identification des requêtes individuelles dans des journaux mixtes tels que Syslog.Le middleware
ShowExceptions
accepte maintenant une application d'exceptions qui est responsable de rendre une exception lorsque l'application échoue. L'application est invoquée avec une copie de l'exception dansenv["action_dispatch.exception"]
et avecPATH_INFO
réécrit en code d'état.Permet de configurer les réponses de secours via un railtie comme dans
config.action_dispatch.rescue_responses
.
7.2.1 Dépréciations
- Dépréciée la possibilité de définir un jeu de caractères par défaut au niveau du contrôleur, utilisez plutôt le nouveau
config.action_dispatch.default_charset
.
7.3 Action View
- Ajout du support
button_tag
àActionView::Helpers::FormBuilder
. Ce support imite le comportement par défaut desubmit_tag
.
<%= form_for @post do |f| %>
<%= f.button %>
<% end %>
Les helpers de date acceptent une nouvelle option
:use_two_digit_numbers => true
, qui rend les boîtes de sélection pour les mois et les jours avec un zéro initial sans changer les valeurs respectives. Par exemple, cela est utile pour afficher des dates au format ISO 8601 telles que '2011-08-01'.Vous pouvez fournir un espace de noms pour votre formulaire afin de garantir l'unicité des attributs id sur les éléments du formulaire. L'attribut namespace sera préfixé par un trait de soulignement dans l'id HTML généré.
<%= form_for(@offer, :namespace => 'namespace') do |f| %>
<%= f.label :version, 'Version' %>:
<%= f.text_field :version %>
<% end %>
Limite le nombre d'options pour
select_year
à 1000. Passez l'option:max_years_allowed
pour définir votre propre limite.content_tag_for
etdiv_for
peuvent maintenant prendre une collection d'enregistrements. Il transmettra également l'enregistrement en tant que premier argument si vous définissez un argument de réception dans votre bloc. Ainsi, au lieu de faire ceci :
@items.each do |item|
content_tag_for(:li, item) do
Title: <%= item.title %>
end
end
Vous pouvez faire ceci :
content_tag_for(:li, @items) do |item|
Title: <%= item.title %>
end
- Ajout de la méthode d'aide
font_path
qui calcule le chemin d'un fichier de police danspublic/fonts
.
7.3.1 Dépréciations
- Le passage de formats ou de gestionnaires à
render :template
et aux autres commerender :template => "foo.html.erb"
est déprécié. Au lieu de cela, vous pouvez fournir directement les options:handlers
et:formats
:render :template => "foo", :formats => [:html, :js], :handlers => :erb
.
7.4 Sprockets
- Ajoute une option de configuration
config.assets.logger
pour contrôler la journalisation de Sprockets. Définissez-la surfalse
pour désactiver la journalisation et surnil
pour utiliserRails.logger
par défaut.
8 Active Record
Les colonnes booléennes avec les valeurs 'on' et 'ON' sont converties en true.
Lorsque la méthode
timestamps
crée les colonnescreated_at
etupdated_at
, elles sont par défaut non nulles.Implémentation de
ActiveRecord::Relation#explain
.Implémentation de
ActiveRecord::Base.silence_auto_explain
qui permet à l'utilisateur de désactiver sélectivement les EXPLAIN automatiques dans un bloc.Implémentation de la journalisation automatique des EXPLAIN pour les requêtes lentes. Un nouveau paramètre de configuration
config.active_record.auto_explain_threshold_in_seconds
détermine ce qui est considéré comme une requête lente. La valeurnil
désactive cette fonctionnalité. Les valeurs par défaut sont de 0,5 en mode développement etnil
en modes test et production. Rails 3.2 prend en charge cette fonctionnalité dans SQLite, MySQL (adaptateur mysql2) et PostgreSQL.Ajout de
ActiveRecord::Base.store
pour déclarer des magasins clé/valeur simples à une seule colonne.class User < ActiveRecord::Base store :settings, accessors: [ :color, :homepage ] end u = User.new(color: 'black', homepage: '37signals.com') u.color # Attribut stocké accessible u.settings[:country] = 'Denmark' # Tout attribut, même s'il n'est pas spécifié avec un accesseur
Ajout de la possibilité d'exécuter des migrations uniquement pour une portée donnée, ce qui permet d'exécuter des migrations uniquement à partir d'un moteur (par exemple pour annuler les modifications d'un moteur qui doivent être supprimées).
rake db:migrate SCOPE=blog
Les migrations copiées à partir des moteurs sont maintenant regroupées avec le nom du moteur, par exemple
01_create_posts.blog.rb
.Implémentation de la méthode
ActiveRecord::Relation#pluck
qui renvoie un tableau de valeurs de colonnes directement à partir de la table sous-jacente. Cela fonctionne également avec les attributs sérialisés.Client.where(:active => true).pluck(:id) # SELECT id from clients where active = 1
Les méthodes d'association générées sont créées dans un module séparé pour permettre la substitution et la composition. Pour une classe nommée MyModel, le module est nommé
MyModel::GeneratedFeatureMethods
. Il est inclus dans la classe modèle immédiatement après le modulegenerated_attributes_methods
défini dans Active Model, de sorte que les méthodes d'association remplacent les méthodes d'attribut du même nom.Ajout de
ActiveRecord::Relation#uniq
pour générer des requêtes uniques.Client.select('DISTINCT name')
..peut être écrit comme suit :
Client.select(:name).uniq
Cela vous permet également de revenir à la non-uniformité dans une relation :
Client.select(:name).uniq.uniq(false)
Prise en charge de l'ordre de tri des index dans les adaptateurs SQLite, MySQL et PostgreSQL.
Autoriser l'option
:class_name
pour les associations à prendre un symbole en plus d'une chaîne de caractères. Cela évite de confondre les débutants et est cohérent avec le fait que d'autres options comme:foreign_key
permettent déjà un symbole ou une chaîne de caractères.has_many :clients, :class_name => :Client # Notez que le symbole doit être en majuscule
En mode développement,
db:drop
supprime également la base de données de test afin d'être symétrique avecdb:create
.La validation d'unicité insensible à la casse évite d'appeler LOWER dans MySQL lorsque la colonne utilise déjà une collation insensible à la casse.
Les fixtures transactionnelles répertorient toutes les connexions de base de données actives. Vous pouvez tester des modèles sur différentes connexions sans désactiver les fixtures transactionnelles.
Ajout des méthodes
first_or_create
,first_or_create!
,first_or_initialize
à Active Record. C'est une meilleure approche que les anciennes méthodes dynamiquesfind_or_create_by
car il est plus clair quels arguments sont utilisés pour trouver l'enregistrement et lesquels sont utilisés pour le créer.User.where(:first_name => "Scarlett").first_or_create!(:last_name => "Johansson")
Ajout d'une méthode
with_lock
aux objets Active Record, qui démarre une transaction, verrouille l'objet (de manière pessimiste) et exécute le bloc. La méthode prend un (facultatif) paramètre et le transmet àlock!
.Cela permet d'écrire ce qui suit :
class Order < ActiveRecord::Base def cancel! transaction do lock! # ... logique d'annulation end end end
comme :
class Order < ActiveRecord::Base def cancel! with_lock do # ... logique d'annulation end end end
8.1 Dépréciations
La fermeture automatique des connexions dans les threads est dépréciée. Par exemple, le code suivant est déprécié :
Thread.new { Post.find(1) }.join
Il doit être modifié pour fermer la connexion à la base de données à la fin du thread :
Thread.new { Post.find(1) Post.connection.close }.join
Seules les personnes qui créent des threads dans leur code d'application doivent se soucier de ce changement.
Les méthodes
set_table_name
,set_inheritance_column
,set_sequence_name
,set_primary_key
,set_locking_column
sont dépréciées. Utilisez plutôt une méthode d'assignation. Par exemple, au lieu deset_table_name
, utilisezself.table_name=
.class Project < ActiveRecord::Base self.table_name = "project" end
Ou définissez votre propre méthode
self.table_name
:class Post < ActiveRecord::Base def self.table_name "special_" + super end end Post.table_name # => "special_posts"
9 Active Model
Ajout de
ActiveModel::Errors#added?
pour vérifier si une erreur spécifique a été ajoutée.Ajout de la possibilité de définir des validations strictes avec
strict => true
qui lève toujours une exception en cas d'échec.Fournir
mass_assignment_sanitizer
en tant qu'API facile pour remplacer le comportement du sanitizer. Prend également en charge les comportements de sanitizer:logger
(par défaut) et:strict
.
9.1 Dépréciations
Dépréciation de
define_attr_method
dansActiveModel::AttributeMethods
car cela n'existait que pour prendre en charge des méthodes commeset_table_name
dans Active Record, qui sont elles-mêmes dépréciées.Dépréciation de
Model.model_name.partial_path
au profit demodel.to_partial_path
.
10 Active Resource
- Réponses de redirection : les réponses 303 See Other et 307 Temporary Redirect se comportent maintenant comme 301 Moved Permanently et 302 Found.
11 Active Support
Ajout de
ActiveSupport:TaggedLogging
qui peut envelopper n'importe quelle classeLogger
standard pour fournir des capacités de balisage.Logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT)) Logger.tagged("BCX") { Logger.info "Stuff" } # Enregistre "[BCX] Stuff" Logger.tagged("BCX", "Jason") { Logger.info "Stuff" } # Enregistre "[BCX] [Jason] Stuff" Logger.tagged("BCX") { Logger.tagged("Jason") { Logger.info "Stuff" } } # Enregistre "[BCX] [Jason] Stuff"
La méthode
beginning_of_week
dansDate
,Time
etDateTime
accepte un argument facultatif représentant le jour à partir duquel la semaine est supposée commencer.ActiveSupport::Notifications.subscribed
permet de s'abonner à des événements pendant l'exécution d'un bloc.Définition des nouvelles méthodes
Module#qualified_const_defined?
,Module#qualified_const_get
etModule#qualified_const_set
qui sont analogues aux méthodes correspondantes de l'API standard, mais acceptent des noms de constantes qualifiées.Ajout de
#deconstantize
qui complète#demodulize
dans les inflections. Cela supprime le segment le plus à droite dans un nom de constante qualifiée.Ajout de
safe_constantize
qui transforme une chaîne en constante mais renvoienil
au lieu de lever une exception si la constante (ou une partie de celle-ci) n'existe pas.ActiveSupport::OrderedHash
est maintenant marqué comme extractable lors de l'utilisation deArray#extract_options!
.Ajout de
Array#prepend
comme alias deArray#unshift
etArray#append
comme alias deArray#<<
.La définition d'une chaîne vide pour Ruby 1.9 a été étendue aux espaces blancs Unicode. De plus, en Ruby 1.8, l'espace idéographique U`3000 est considéré comme un espace blanc.
L'inflecteur comprend les acronymes.
Ajout de
Time#all_day
,Time#all_week
,Time#all_quarter
etTime#all_year
comme moyen de générer des plages.Event.where(:created_at => Time.now.all_week) Event.where(:created_at => Time.now.all_day)
Ajout de
instance_accessor: false
comme option pourClass#cattr_accessor
et ses équivalents.ActiveSupport::OrderedHash
a maintenant un comportement différent pour#each
et#each_pair
lorsqu'un bloc acceptant ses paramètres avec un splat est donné.Ajout de
ActiveSupport::Cache::NullStore
pour une utilisation en développement et en test.Suppression de
ActiveSupport::SecureRandom
au profit deSecureRandom
de la bibliothèque standard.
11.1 Dépréciations
ActiveSupport::Base64
est déprécié au profit de::Base64
.ActiveSupport::Memoizable
est déprécié au profit du modèle de mémoization Ruby.Module#synchronize
est déprécié sans remplacement. Veuillez utiliser le moniteur de la bibliothèque standard de Ruby.ActiveSupport::MessageEncryptor#encrypt
etActiveSupport::MessageEncryptor#decrypt
sont dépréciés.ActiveSupport::BufferedLogger#silence
est déprécié. Si vous souhaitez supprimer les journaux pour un certain bloc, modifiez le niveau de journalisation pour ce bloc.ActiveSupport::BufferedLogger#open_log
est déprécié. Cette méthode ne devrait pas être publique en premier lieu.Le comportement de
ActiveSupport::BufferedLogger
qui crée automatiquement le répertoire pour votre fichier journal est déprécié. Assurez-vous de créer le répertoire pour votre fichier journal avant de l'instancier.ActiveSupport::BufferedLogger#auto_flushing
est déprécié. Définissez le niveau de synchronisation sur la poignée de fichier sous-jacente comme ceci. Ou ajustez votre système de fichiers. Le cache FS contrôle maintenant la vidange.f = File.open('foo.log', 'w') f.sync = true ActiveSupport::BufferedLogger.new f
ActiveSupport::BufferedLogger#flush
est déprécié. Définissez la synchronisation sur votre poignée de fichier ou ajustez votre système de fichiers.
12 Crédits
Consultez la liste complète des contributeurs à Rails pour les nombreuses personnes qui ont passé de nombreuses heures à faire de Rails, le framework stable et robuste qu'il est. Félicitations à tous.
Les notes de version de Rails 3.2 ont été compilées par Vijay Dev.
Retour d'information
Vous êtes encouragé à contribuer à l'amélioration de la qualité de ce guide.
Veuillez contribuer si vous trouvez des fautes de frappe ou des erreurs factuelles. Pour commencer, vous pouvez lire notre contribution à la documentation section.
Vous pouvez également trouver du contenu incomplet ou des informations qui ne sont pas à jour. Veuillez ajouter toute documentation manquante pour la version principale. Assurez-vous de vérifier Edge Guides d'abord pour vérifier si les problèmes ont déjà été résolus ou non sur la branche principale. Consultez les Directives des guides Ruby on Rails pour le style et les conventions.
Si pour une raison quelconque vous repérez quelque chose à corriger mais ne pouvez pas le faire vous-même, veuillez ouvrir un problème.
Et enfin, toute discussion concernant la documentation de Ruby on Rails est la bienvenue sur le Forum officiel de Ruby on Rails.