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)

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.


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


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

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.


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


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.


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"

-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"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.