Question

Maintenant que Rails 3 bêta est, je pensais que j'aurais un coup d'œil à la réécriture d'une application que je viens de commencer travailler dans Rails 3 bêta, à la fois pour obtenir une sensation pour elle et obtenir un peu d'une tête de démarrage . L'application utilise MongoDB et MongoMapper pour tous ses modèles et n'a donc pas besoin de ActiveRecord. Dans la version précédente, je déchargeais activerecord de la manière suivante:

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, j'ai regardé les boot.rb comme il a suggéré, mais pour autant que je peux voir, il n'y a pas la moindre idée ici comment je pourrais aller sur le déchargement AR. La raison pour laquelle je dois faire c'est parce que non seulement il est stupide à charger quelque chose que je ne veux pas, mais il se plaint de son incapacité à établir une connexion DB même lorsque je tente de lancer un générateur pour un contrôleur. Ceci est parce que je l'ai essuyés database.yml et remplacé par les détails de connexion pour MongoDB afin d'utiliser ce point essentiel en utilisant database.yml pour les détails de connexion MongoDB. Je ne sais pas pourquoi il a besoin d'être en mesure d'initier une connexion DB tout simplement pour générer un contrôleur de toute façon ....

Quelqu'un est-il au courant des bonnes Rails 3 façon de le faire?

Était-ce utile?

La solution

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

La commande rails qui génère le modèle d'application dispose désormais d'une -O option qui lui dit de sauter 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.rb ne pas require 'rails/all' ou require "active_record/railtie" . Au lieu de cela, pour une norme sans configuration Rails ActiveRecord, il devrait avoir uniquement 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 ne possède pas la ligne g.orm :active_record. Vous pouvez définir explicitement à nil, si vous voulez, mais cela devrait être la valeur par défaut lorsque g.orm est complètement omis.

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

Autres conseils

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' par

    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.

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

rails new appname --skip-active-record

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

development.rb fichier.

Toutes les réponses sont vraies. L'une chose que je devais faire dans des rails 3.1 est de commenter

config.active_record.identity_map = true

config/application.rb.

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 enlever

  # 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

Aussi commentaires sur

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

(noté sur rails 03/02/13)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top