Deshabilitar ActiveRecord para Rails 4

113

Quiero deshabilitar ActiveRecord en Rails 4. Hice lo siguiente en 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

Por tengo un error 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)
ア レ ッ ク ス
fuente
4
¿Por qué no usarlo rails new ... -Opara deshabilitar activerecord?
Yevgeniy Anfilofyev
¿Se necesita app_middleware.delete, incluso podría estar causando el problema?
9
Para las aplicaciones de rieles 4/5/6 existentes, puede deshabilitar el registro activo después de esta respuesta .
Alter Lagos

Respuestas:

261

Si está creando una nueva aplicación, puede usar -Opara omitir ActiveRecord:

rails new my_app -O

Para aplicaciones existentes:

1. Elimine las gemas del adaptador de base de datos de su Gemfile (mysql2, sqlite3, etc.)

2. Cambie su config/application.rb

Elimine la require 'rails/alllínea y requiera marcos (entre los disponibles en su railsversión, la lista varía, no solo copie) que desea usar, por ejemplo:

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

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

3. Elimine su config/database.ymlarchivo db/schema.rby las migraciones (si las hubiera)

4. Eliminar registro de migración test/test_helper.rb

5. Elimine cualquier configuración de ActiveRecord de sus config/environmentsarchivos (esto es lo que está causando su error)

Esto es todo lo que necesita hacer para una aplicación Rails vacía. Si se encuentra con problemas causados ​​por su código existente, el seguimiento de la pila debería brindarle suficiente información sobre lo que necesita cambiar. Por ejemplo, podría tener alguna configuración de ActiveRecord en sus inicializadores.

pez mecanico
fuente
2
Además de estos cambios, también tuve que eliminar un par de líneas de spec_helpers.rb (usando RSpec): sobre accesorios y transacciones. También estaba usando active_model, así que reemplacé active_record con active_model en la lista de requisitos de aquí: stackoverflow.com/questions/19078044/…
arnab
3
¿Dónde puedo ver una lista de los marcos de Rails disponibles, que se requieren en lugar de 'rieles / todos'?
emilesilvis
18
La lista de todo lo que require 'rails/all'incluye se puede encontrar aquí .
Nates
3
Creé una aplicación con hace rails new my_app -Oun mes. Ahora quiero recuperar el registro activo. ¿Qué archivos / gemas / configuración necesito agregar ahora?
Jak
1
También tuve que quitarme config.active_record.raise_in_transactional_callbacks = truede config/application.rb.
B Seven
15

Hola, esto es lo que dan los rieles predeterminados 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"

dentro de su config / application.rb

Además, viene sin database.yml y SIN db / migrate / * y schema.rb

jasmo2
fuente
4
y para rieles 5 <= agregarrequire "action_cable/engine"
rails_id
7

Dado que este sigue siendo el primer resultado al buscar en Google para deshabilitar el registro activo para Rails 5, agregaré esto aquí:

Para rieles 5

Haga todos los pasos en la respuesta de @mechanicalfish, pero también elimine la línea

Rails.application.config.active_record.belongs_to_required_by_default = true

de

config/initializers/new_framework_defaults.rb
mmeyers
fuente
5

Para aquellos que usan la gema rails-api , pueden encontrar un error similar al usar la --skip-active-recordbandera al hacer rails-api new my_api. La solución actual (hasta que se publique una nueva versión corregida de la gema) es editar su gema rails-api para tener esta confirmación . Use bundle openy reemplace el viejo Gemfilepor el nuevo corregido. Vuelva a ejecutar y debería estar todo listo.

Alex Moore-Niemi
fuente
4

Para deshabilitar ActiveRecord en Rails 4.2, puede crear 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

Ver el middleware de rake de terminal

Vinicius Luiz
fuente
4

Para rieles 5:

Si está generando una nueva aplicación

Use la --skip-active-recordopción para generar una aplicación sin una base de datos:

rails new myApp --skip-active-record

Observe el guión adicional '-' a diferencia de las versiones anteriores de Rails.

Crimbo
fuente
1
En caso de que ya haya creado su proyecto sin omitir el registro activo, simplemente comente todas las referencias de active_record en config / environment / # config.active_record.verbose_query_logs = true # config.active_record.migration_error =: page_load Y cambie el nombre de su archivo database.yml a otra cosa . Eso lo hizo por mí.
Juan Ricardo
1
también comente esta línea en bin / setup => # system! 'bin / rails db: setup'
Juan Ricardo
1

Para complementos de Rails (o gemas) con una spec/dummyaplicación

Cuando su aplicación rails se encuentra instalada spec/dummye inicia su servidor desde el directorio raíz del complemento. Es posible que aún obtenga el siguiente error:

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

Para evitar esto, elimine require rails/alldentro del archivo bin/railsy requiera los marcos que desee usar, por ejemplo:

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

Para Ruby On Rails versión 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
fuente