Retirer ActiveRecord Rails 3
-
19-09-2019 - |
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?
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 pasrequire 'rails/all'
ourequire "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 sectionconfig.generators
, assurez-vous qu'il ne possède pas la ligneg.orm :active_record
. Vous pouvez définir explicitement ànil
, si vous voulez, mais cela devrait être la valeur par défaut lorsqueg.orm
est complètement omis. -
En option, mais dans votre
Gemfile
, supprimez la ligne degem
qui charge le module de base de données. Cela pourrait être legem "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'
ougem 'pg'
. -
Dans config / application.rb, remplacez
require 'rails/all'
parrequire "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)