Deaktivieren Sie ActiveRecord für Rails 4

113

Ich möchte ActiveRecord in Rails 4 deaktivieren. Ich habe Folgendes in ausgeführt 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

Durch habe ich einen Fehler von

/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)
ア レ ッ ク ス
quelle
4
Warum nicht einfach rails new ... -Oaktivieren, um Activerecord zu deaktivieren?
Jewgenij Anfilofjew
Wird die Datei app_middleware.delete benötigt, kann dies sogar das Problem verursachen?
Haus9
Für vorhandene Rails 4/5/6 Apps können Sie den aktiven Datensatz nach dieser Antwort deaktivieren .
Alter Lagos

Antworten:

261

Wenn Sie eine neue Anwendung erstellen, können Sie -OActiveRecord überspringen:

rails new my_app -O

Für bestehende Anwendungen:

1. Entfernen Sie Datenbankadapter-Gems aus Ihrer Gemfile (mysql2, sqlite3 usw.).

2. Ändern Sie Ihre config/application.rb

Entfernen Sie die require 'rails/allZeile und benötigen Sie Frameworks (unter denen, die in Ihrer railsVersion verfügbar sind , variiert die Liste, kopieren Sie nicht nur), die Sie verwenden möchten, zum Beispiel:

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

Entfernen config.active_record.raise_in_transactional_callbacks = truevonconfig/application.rb

3. Löschen Sie Ihre config/database.ymlDatei db/schema.rbund Migrationen (falls vorhanden).

4. Löschen Sie den Migrations-Check-in test/test_helper.rb

5. Löschen Sie alle ActiveRecord-Konfigurationen aus Ihren config/environmentsDateien (dies verursacht Ihren Fehler).

Dies ist alles, was Sie für eine leere Rails-App tun müssen. Wenn Sie auf Probleme stoßen, die durch Ihren vorhandenen Code verursacht werden, sollte die Stapelverfolgung ausreichend Informationen darüber enthalten, was Sie ändern müssen. Möglicherweise haben Ihre Initialisierer beispielsweise eine ActiveRecord-Konfiguration.

mechanischer Fisch
quelle
2
Zusätzlich zu diesen Änderungen musste ich auch einige Zeilen aus spec_helpers.rb entfernen (mithilfe von RSpec): Informationen zu Fixtures und Transaktionen. Ich habe auch active_model verwendet, also habe ich active_record durch active_model in der Anforderungsliste von hier ersetzt: stackoverflow.com/questions/19078044/…
arnab
3
Wo kann ich eine Liste der verfügbaren Rails-Frameworks sehen, die anstelle von 'Rails / All' erforderlich sind?
Emilesilvis
18
Die Liste aller require 'rails/all'Einschlüsse finden Sie hier .
Nates
3
Ich habe vor rails new my_app -Oeinem Monat eine Anwendung erstellt. Jetzt möchte ich die aktive Aufzeichnung zurück. Welche Dateien / Edelsteine ​​/ Konfigurationen muss ich jetzt hinzufügen?
Jak
1
Ich hatte auch entfernen config.active_record.raise_in_transactional_callbacks = trueaus config/application.rb.
B sieben
15

Hallo, das ist es, was die Standardschienen new new_app -O geben

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"

in Ihrer config / application.rb

Außerdem kommt es ohne database.yml und NO db / migrate / * und schema.rb

jasmo2
quelle
4
und für Schienen 5 <= addrequire "action_cable/engine"
rails_id
7

Da dies immer noch der erste Treffer bei der Suche in Google nach Deaktivierung des aktiven Datensatzes für Rails 5 ist, füge ich dies hier hinzu:

Für Schienen 5

Führen Sie alle Schritte in der Antwort von @mechanicalfish aus, entfernen Sie jedoch auch die Zeile

Rails.application.config.active_record.belongs_to_required_by_default = true

von

config/initializers/new_framework_defaults.rb
mmeyers
quelle
5

Bei Benutzern des Rails-API-Edelsteins kann ein ähnlicher Fehler auftreten, wenn Sie das --skip-active-recordFlag verwenden rails-api new my_api. Der aktuelle Fix (bis eine neue korrigierte Version des Edelsteins veröffentlicht wird) besteht darin, Ihren Rails-API-Edelstein so zu bearbeiten, dass dieser Commit ausgeführt wird . Verwenden bundle openund ersetzen Sie die alte Gemfiledurch die neue korrigierte. Wiederholen und Sie sollten fertig sein.

Alex Moore-Niemi
quelle
4

Zum Deaktivieren von ActiveRecord in Rails 4.2 können Sie config / initializers / middleware.rb erstellen

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

Siehe die Terminal Rake Middleware

Vinicius Luiz
quelle
4

Für Schienen 5:

Wenn Sie eine neue App generieren

Verwenden Sie die --skip-active-recordOption, um eine Anwendung ohne Datenbank zu generieren:

rails new myApp --skip-active-record

Beachten Sie den zusätzlichen Bindestrich '-' im Gegensatz zu früheren Versionen von Rails.

Crimbo
quelle
1
Falls Sie Ihr Projekt bereits erstellt haben, ohne den aktiven Datensatz zu überspringen, kommentieren Sie einfach alle Verweise auf active_record in config / environment / # config.active_record.verbose_query_logs = true # config.active_record.migration_error =: page_load und benennen Sie Ihre Datei database.yml in eine andere Datei um . Das hat es für mich getan.
Juan Ricardo
1
Kommentieren Sie diese Zeile auch in bin / setup => # system! 'bin / Rails db: setup'
Juan Ricardo
1

Für Rails Plugins (oder Edelsteine) mit einer spec/dummyApp

Wenn Ihre Rails-App lebt spec/dummyund Sie Ihren Server vom Plugin-Root-Verzeichnis aus starten. Möglicherweise wird immer noch der folgende Fehler angezeigt:

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

Um dies zu vermeiden, entfernen Sie require rails/alldie Datei bin/railsund benötigen Sie Frameworks, die Sie verwenden möchten, z. B.:

# 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
quelle
-1

Für 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
quelle