Désactiver ActiveRecord pour Rails 4

113

Je veux désactiver ActiveRecord dans Rails 4. J'ai fait ce qui suit dans config/application.rb

require File.expand_path('../boot', __FILE__)

# require 'rails/all'  -- commented

require "action_controller/railtie"
require "action_mailer/railtie"
#require "active_resource/railtie" no need
#require "rails/test_unit/railtie" no need
#require "sprockets/railtie" no need

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(:default, Rails.env)

module MyApp
  class Application < Rails::Application
     config.app_middleware.delete "ActiveRecord::ConnectionAdapters::ConnectionManagement"
  end
end

Par j'ai une erreur de

/home/alex/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/railtie/configuration.rb:95:in 
  method_missing: undefined method active_record for #<Rails::Application::Configuration:0x00000002005c38> (NoMethodError)
ア レ ッ ク ス
la source
4
Pourquoi ne pas simplement utiliser rails new ... -Opour désactiver activerecord?
Yevgeniy Anfilofyev
L'application app_middleware.delete est-elle nécessaire, peut-être même être à l'origine du problème?
maison9
Pour les applications de rails 4/5/6 existantes, vous pouvez désactiver l'enregistrement actif en suivant cette réponse .
Alter Lagos

Réponses:

261

Si vous créez une nouvelle application, vous pouvez utiliser -Opour ignorer ActiveRecord:

rails new my_app -O

Pour les applications existantes:

1. Supprimez les gemmes d'adaptateur de base de données de votre Gemfile (mysql2, sqlite3, etc.)

2. Changez votre config/application.rb

Supprimez la require 'rails/allligne et nécessitent les frameworks (parmi ceux disponibles dans votre railsversion, la liste varie, ne vous contentez pas de copier) que vous souhaitez utiliser, par exemple:

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

Supprimer config.active_record.raise_in_transactional_callbacks = truedeconfig/application.rb

3. Supprimez votre config/database.ymlfichier db/schema.rbet les migrations (le cas échéant)

4. Supprimer l'enregistrement de la migration test/test_helper.rb

5. Supprimez toute configuration ActiveRecord de vos config/environmentsfichiers (c'est ce qui cause votre erreur)

C'est tout ce que vous devez faire pour une application Rails vide. Si vous rencontrez des problèmes causés par votre code existant, le suivi de la pile devrait vous donner suffisamment d'informations sur ce que vous devez modifier. Vous pouvez par exemple avoir une configuration ActiveRecord dans vos initialiseurs.

poisson mécanique
la source
2
En plus de ces changements, j'ai également dû supprimer quelques lignes de spec_helpers.rb (en utilisant RSpec): à propos des fixtures et des transactions. J'utilisais également active_model, j'ai donc remplacé active_record par active_model dans la liste des exigences à partir d'ici: stackoverflow.com/questions/19078044/…
arnab
3
Où puis-je voir une liste des cadres Rails disponibles, à exiger au lieu de «rails / all»?
emilesilvis
18
La liste de tout ce qui require 'rails/all'comprend peut être trouvée ici .
nates
3
J'ai créé une application avec il y a rails new my_app -Oun mois. Maintenant, je veux récupérer l'enregistrement actif. Quels sont les fichiers / gemmes / configuration que je dois ajouter maintenant?
Jak
1
J'ai également dû retirer config.active_record.raise_in_transactional_callbacks = truede config/application.rb.
B Seven
15

Salut c'est ce que donne les rails par défaut new_app -O

require "rails"
# Pick the frameworks you want: 
require "active_model/railtie" 
require "active_job/railtie"
# require "active_record/railtie" 
require "action_controller/railtie" 
require "action_mailer/railtie" 
require "action_view/railtie" 
require "sprockets/railtie" 
require "rails/test_unit/railtie"

dans votre config / application.rb

De plus, il est livré sans database.yml et NO db / migrate / * et schema.rb

jasmo2
la source
4
et pour les rails 5 <= addrequire "action_cable/engine"
rails_id
7

Comme il s'agit toujours du premier succès lors de la recherche sur Google pour désactiver l'enregistrement actif pour Rails 5, j'ajouterai ceci ici:

Pour Rails 5

Suivez toutes les étapes de la réponse @mechanicalfish, mais supprimez également la ligne

Rails.application.config.active_record.belongs_to_required_by_default = true

de

config/initializers/new_framework_defaults.rb
mmeyers
la source
5

Pour ceux qui utilisent le gem rails-api, vous pouvez rencontrer une erreur similaire lors de l'utilisation de l' --skip-active-recordindicateur lors de l'utilisation rails-api new my_api. Le correctif actuel (jusqu'à ce qu'une nouvelle version corrigée du gem soit publiée) est de modifier votre gem rails-api pour avoir ce commit . Utilisez bundle openet remplacez l'ancien Gemfilepar le nouveau corrigé. Relancez et vous devriez être prêt.

Alex Moore-Niemi
la source
4

Pour désactiver ActiveRecord dans Rails 4.2, vous pouvez créer config / initializers / middleware.rb

Rails.application.middleware.tap do |middleware|
  middleware.delete ActiveRecord::Migration::CheckPending
  middleware.delete ActiveRecord::ConnectionAdapters::ConnectionManagement
  middleware.delete ActiveRecord::QueryCache
end

Voir le middleware de rake terminal

Vinicius Luiz
la source
4

Pour les rails 5:

Si vous générez une nouvelle application

Utilisez l' --skip-active-recordoption pour générer une application sans base de données:

rails new myApp --skip-active-record

Remarquez le trait d'union supplémentaire «-» par opposition aux versions précédentes de Rails.

Crimbo
la source
1
Si vous avez déjà créé votre projet sans ignorer l'enregistrement actif, commentez simplement toutes les références active_record dans config / environnements / # config.active_record.verbose_query_logs = true # config.active_record.migration_error =: page_load Et renommez votre fichier database.yml en autre chose . Cela l'a fait pour moi.
Juan Ricardo
1
commentez également cette ligne dans bin / setup => # system! 'bin / rails db: setup'
Juan Ricardo
1

Pour Rails Plugins (ou gemmes) avec une spec/dummyapplication

Lorsque votre application rails vit spec/dummyet que vous démarrez votre serveur à partir du répertoire racine du plugin. Vous pouvez toujours obtenir l'erreur suivante:

Cannot load `Rails.application.database_configuration`: Could not load database configuration. No such file - ["config/database.yml"] 

Pour éviter cela, supprimez l' require rails/allintérieur du fichier bin/railset exigez les frameworks que vous souhaitez utiliser, par exemple:

# Pick the frameworks you want: 
require "active_model/railtie" 
require "active_job/railtie"
# require "active_record/railtie" 
require "action_cable/engine"
require "action_controller/railtie" 
require "action_mailer/railtie" 
require "action_view/railtie" 
require "sprockets/railtie" 
require "rails/test_unit/railtie"
rya brody
la source
-1

Pour Ruby On Rails version 5.1.x

require "rails"
# Pick the frameworks you want:
require "active_model/railtie"
require "active_job/railtie"
# require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "action_cable/engine"
require "sprockets/railtie"
require "rails/test_unit/railtie"
Kamil Załęski
la source