99 votes

Supprimer ActiveRecord dans Rails 3

Maintenant que les Rails de la version bêta 3 est sorti, je pensais que j'aurais un coup d'oeil à la réécriture d'une application que je viens de commencer à travailler sur les Rails de la version bêta 3, à la fois pour obtenir une sensation pour elle, et obtenir un peu d'avance. L'application utilise MongoDB et MongoMapper pour l'ensemble de ses modèles et, par conséquent, n'a pas besoin d'ActiveRecord. Dans la version précédente, je suis déchargement activerecord de la façon suivante:

config.frameworks -= [ :active_record ]    # inside environment.rb

Dans la dernière version, cela ne fonctionne pas - il renvoyait un message d'erreur:

/Library/Ruby/Gems/1.8/gems/railties-3.0.0.beta/lib/rails/configuration.rb:126:in
  `frameworks': config.frameworks in no longer supported. See the generated 
  config/boot.rb for steps on how to limit the frameworks that will be loaded 
  (RuntimeError)
 from *snip*

Bien sûr, j'ai regardé le démarrage.rb comme il l'a suggéré, mais aussi loin que je peux voir, il n'y a pas la moindre idée de comment je pourrais aller sur le déchargement de AR. La raison j'ai besoin de le faire c'est parce que non seulement c'est idiot de charger quelque chose que je ne veux pas, mais il se plaint de son incapacité à faire une connexion DB, même lorsque j'essaie d'exécuter un générateur d'un contrôleur. C'est parce que j'ai essuyé des database.yml et l'a remplacé par des détails de connexion pour MongoDB pour utiliser ce gist pour l'utilisation de la base de données.yml pour MongoDB les détails de la connexion. Je ne sais pas pourquoi il a besoin pour être en mesure d'établir une connexion DB à tous juste pour générer un contrôleur de toute façon....

Quelqu'un est-il au courant de la bonne Rails 3, la façon de le faire?

155voto

Shtééf Points 10444

Je vais par ce à partir de la lecture de la source, alors laissez-moi savoir si elle a effectivement travaillé. :)

L' rails commande qui génère le modèle d'application a maintenant une option -O, qui lui dit de sauter ActiveRecord.

Si vous n'avez pas envie de relancer rails, vous devez vérifier les éléments suivants dans votre application existante:

  • Vérifiez que votre config/application.rb n' ont require 'rails/all' ou require "active_record/railtie". Au lieu de cela, pour une norme de Rails d'installation sans ActiveRecord, il devrait avoir seulement les suivantes:

    require File.expand_path('../boot', __FILE__)
    
    require "action_controller/railtie"
    require "action_mailer/railtie"
    require "active_resource/railtie"
    require "rails/test_unit/railtie"
    require "sprockets/railtie"
    
    # Auto-require default libraries and those for the current Rails environment. 
    Bundler.require :default, Rails.env
    
  • Si, en config/application.rb, vous êtes à l'aide de l' config.generators section, assurez-vous de ne pas avoir la ligne, g.orm :active_record. Vous pouvez définir cette explicitement nil, si vous voulez, mais ce doit être la valeur par défaut lors de l' g.orm est complètement omis.

  • Facultatif, mais dans votre Gemfile, suppression de l' gem ligne qui charge le module pour votre base de données. Cela pourrait être la ligne gem "mysql" par exemple.

46voto

apeiros Points 898

Rails 4

Je cherchais comment le désactiver dans les rails 4 et seulement trouvé cette réponse qui ne fonctionne plus dans les rails 4. Donc, c'est comment vous pouvez le faire dans les rails 4 (testé en RC1).

Dans un nouveau projet

rails new YourProject --skip-active-record

Dans un projet existant

  • Dans votre Gemfile, supprimez le pilote de base de données gem, par exemple, gem 'sqlite3' ou gem 'pg'.
  • Dans config/application.rb, remplacez - require 'rails/all' avec

    exiger "action_controller/railtie"
    exiger "action_mailer/railtie"
    besoin de "pignons/railtie"
    besoin de "rails/test_unit/railtie"
    
  • Dans config/environments/développement.rb, supprimez ou commentez config.active_record.migration_error = :page_load

  • Potentiellement, vous devez supprimer active_record aides de l'spec_helper.rb (via le Venin dans les commentaires)

  • Potentiellement, vous devez retirer le ConnectionManagement middleware (cela semble être le cas à la licorne): config.app_middleware.delete "ActiveRecord::ConnectionAdapters::ConnectionManagement" (via http://stackoverflow.com/a/18087332/764342)

J'espère que cela aide les autres à la recherche pour savoir comment désactiver ActiveRecord dans les Rails 4.

36voto

Jim Geurts Points 8199

Pour une nouvelle application rails, vous pouvez l'exclure en spécifiant le paramètre --skip-active-record. Par exemple:

 rails new appname --skip-active-record
 

15voto

vlad Points 402

Si vous avez généré un nouveau projet en utilisant Rails 3.2, vous devrez également commenter:

 config.active_record.mass_assignment_sanitizer = :strict
 

et

 config.active_record.auto_explain_threshold_in_seconds = 0.5
 

dans votre fichier development.rb .

6voto

Michal Kuklis Points 671

Tout ce qui précède est vrai. La seule chose que je devais faire dans les rails 3.1 est de commenter

 config.active_record.identity_map = true
 

en config/application.rb .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X