2010-02-06 11 views
99

Maintenant que la version bêta de Rails 3 est sortie, j'ai pensé à réécrire une application que je viens de commencer à utiliser dans Rails 3 beta, à la fois pour en avoir une idée et obtenir un peu d'un bon départ. L'application utilise MongoDB et MongoMapper pour tous ses modèles et n'a donc pas besoin d'ActiveRecord. Dans la version précédente, je déchargeais activerecord de la manière suivante:Supprimer ActiveRecord dans Rails 3

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

Dans la dernière version, cela ne fonctionne pas - il jette juste une 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, je l'ai regardé le boot.rb comme il a suggéré, mais autant que je peux voir, il n'y a aucune idée ici de la façon dont je pourrais aller décharger AR. La raison pour laquelle je dois faire ceci est parce que non seulement il est stupide de charger quelque chose que je ne veux pas, mais il se plaint de son incapacité à établir une connexion de DB même quand j'essaye d'exécuter un générateur pour un contrôleur. C'est parce que j'ai essuyé database.yml et l'a remplacé avec les détails de connexion pour MongoDB afin d'utiliser this gist pour l'utilisation de database.yml pour les détails de connexion MongoDB. Je ne sais pas pourquoi il doit être en mesure de lancer une connexion DB du tout juste pour générer un contrôleur de toute façon ....

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

Répondre

155

Je vais par là de la lecture de la source, alors laissez-moi savoir si cela a réellement fonctionné. :)

La commande rails qui génère le modèle d'application a maintenant une option -O, qui lui indique d'ignorer ActiveRecord.

Si vous ne vous sentez pas comme réexécution rails, vous devriez vérifier les points suivants dans votre application existante:

  • Vérifiez que votre config/application.rbne ont require 'rails/all' ou require "active_record/railtie". Au lieu de cela, pour une norme sans configuration Rails ActiveRecord, il devrait avoir que ce qui suit nécessite:

    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, dans config/application.rb, vous utilisez la section config.generators, assurez-vous qu'il n'a pas la ligne g.orm :active_record . Vous pouvez définir cela explicitement à nil, si vous le souhaitez, mais cela doit être le comportement par défaut lorsque g.orm est complètement omis.

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

+3

Eh oui, qui semble l'avoir fait. Il semble que l'option -O peut aussi être appelée '--skip-activerecord'. J'ai exécuté la commande rails pour une autre application (temporaire) avec cette option et cela a généré un nouveau modèle d'application correspondant exactement à ce que vous avez écrit ci-dessus. Donc, je pourrais simplement copier et coller ces changements sur mon application réelle. Merci - belle trouvaille :) –

+1

Excellent - merci pour le --skip-activerecord. C'est juste ce dont j'avais besoin. – Finglas

+0

Cela fonctionne pour la plupart, sauf quand je cours des rails génèrent - je vois toujours des trucs d'ActiveRecord là - comment je l'enlève? – Hackeron

6

Tout ce qui précède est vrai. L'une chose que je devais faire dans des rails 3.1 est de commenter

config.active_record.identity_map = true 

dans config/application.rb.

36

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

rails new appname --skip-active-record 
+0

Je l'ai fait et a couru quelques diffs pour trouver et supprimer les trucs dans mon application actuelle qui utilisait ActiveRecord –

15

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

config.active_record.mass_assignment_sanitizer = :strict 

et

config.active_record.auto_explain_threshold_in_seconds = 0.5 

dans votre development.rb fichier .

1

également commentaire sur

# config/application.rb  
config.active_record.whitelist_attributes = true 

(noté sur des rails 3.2.13)

2

Si vous utilisez rspec, vous devez également supprimer (en spec_helper):

# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 

et supprimer

# If you're not using ActiveRecord, or you'd prefer not to run each of your 
    # examples within a transaction, remove the following line or assign false 
    # instead of true. 
    config.use_transactional_fixtures = true 
45

Rails 4

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

Dans un nouveau projet

rails new YourProject --skip-active-record 

Dans un projet existant

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

     
    require "action_controller/railtie" 
    require "action_mailer/railtie" 
    require "sprockets/railtie" 
    require "rails/test_unit/railtie" 
    

  • Dans config/environnements/development.rb, supprimer ou commenter config.active_record.migration_error = :page_load

  • potentiellement vous devez supprimer les aides active_record du spec_helper (via VenoM dans les commentaires)

  • potentiellement vous devez supprimer le middleware connectionManagement (semble être le cas avec la licorne): config.app_middleware.delete "ActiveRecord::ConnectionAdapters::ConnectionManagement" (via https://stackoverflow.com/a/18087332/764342)

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

+3

Merci! Vous devez quand même supprimer les helpers d'active_record de spec_helper (non obligatoire, mais si vous utilisez des specs). Voir le dernier commentaire de Rimian. – VenoM

+0

m'a aidé, merci! Selon les commentaires ci-dessous, il peut y avoir d'autres déclarations de configuration à commenter dans les fichiers application.rb et/ou environnements/{env} .rb. YMMV. –

+0

l'activeecord reste encore dans le gemfile.lock ... Pouvons-nous faire quelque chose contre ça? – Boti

Questions connexes