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)

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.


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


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

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.


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


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.


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"

-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"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.