Eliminar ActiveRecord en Rails 3

Ahora que salió Rails 3 beta, pensé en reescribir una aplicación en la que comencé a trabajar en Rails 3 beta, tanto para tener una idea como para obtener un poco de ventaja. La aplicación utiliza MongoDB y MongoMapper para todos sus modelos y, por lo tanto, no tiene necesidad de ActiveRecord. En la versión anterior, estoy descargando activerecord de la siguiente manera:

config.frameworks -= [ :active_record ] # inside environment.rb 

En la última versión, esto no funciona, solo arroja un error:

 /Library/Ruby/Gems/1.8/gems/railties-3.0.0.beta/lib/rails/configuration.rb:126:in `frameworks': config.frameworks in no longer supported. See the generated config/boot.rb for steps on how to limit the frameworks that will be loaded (RuntimeError) from *snip* 

Por supuesto, he examinado boot.rb como sugería, pero hasta donde puedo ver, no hay ninguna pista aquí sobre cómo podría descargar AR. La razón por la que necesito hacer esto es porque no solo es una tontería cargar algo que no quiero, sino que se queja de su incapacidad para hacer una conexión de base de datos incluso cuando bash ejecutar un generador para un controlador. Esto se debe a que he borrado database.yml y lo he reemplazado con detalles de conexión para MongoDB con el fin de utilizar esta idea para usar database.yml para detalles de conexión de MongoDB. No estoy seguro de por qué necesita poder iniciar una conexión de base de datos para generar un controlador de todos modos …

¿Alguien está al tanto de la forma correcta de Rails 3 de hacer esto?

Voy a leer esta fuente, así que avíseme si realmente funcionó. 🙂

El comando de rails que genera la plantilla de aplicación ahora tiene una opción -O , que le indica que omita ActiveRecord.

Si no desea volver a ejecutar los rails , debe verificar lo siguiente en su aplicación existente:

  • Compruebe que su config/application.rb no require 'rails/all' o require "active_record/railtie" . En cambio, para una configuración estándar de Rails sin ActiveRecord, solo debe tener lo siguiente que requiere:

     require File.expand_path('../boot', __FILE__) require "action_controller/railtie" require "action_mailer/railtie" require "active_resource/railtie" require "rails/test_unit/railtie" require "sprockets/railtie" # Auto-require default libraries and those for the current Rails environment. Bundler.require :default, Rails.env 
  • Si, en config/application.rb , está utilizando la sección config.generators , asegúrese de que no tenga la línea g.orm :active_record . Puede establecer esto explícitamente en nil , si lo desea, pero este debería ser el predeterminado cuando g.orm se omita por completo.

  • Opcional, pero en su Gemfile , elimine la línea gem que carga el módulo para su base de datos. Esta podría ser la línea gem "mysql" por ejemplo.

Carriles 4

Estaba buscando cómo deshabilitarlo en Rails 4 y solo encontré esta respuesta que ya no funciona en Rails 4. Así es como puedes hacerlo en Rails 4 (probado en RC1).

En un nuevo proyecto

 rails new YourProject --skip-active-record 

En un proyecto existente

  • En su Gemfile, elimine la gem del controlador de la base de datos, por ejemplo, gem 'sqlite3' o gem 'pg' .
  • En config / application.rb, reemplace require 'rails/all' con

     requiere "action_controller / railtie"
     requiere "action_mailer / railtie"
     requiere "piñones / railtie"
     requiere "rails / test_unit / railtie"
    

  • En config / environments / development.rb, eliminar o comentar config.active_record.migration_error = :page_load

  • Potencialmente tiene que eliminar active_record helpers desde el spec_helper (a través de VenoM en los comentarios)

  • Potencialmente tiene que eliminar el middleware ConnectionManagement (parece ser el caso con unicornio): config.app_middleware.delete "ActiveRecord::ConnectionAdapters::ConnectionManagement" (a través de https://stackoverflow.com/a/18087332/764342 )

Espero que esto ayude a otros a buscar cómo desactivar ActiveRecord en Rails 4.

Para una nueva aplicación de Rails, puede hacer que excluya el registro activo especificando el parámetro –skip-active-record. P.ej:

 rails new appname --skip-active-record 

Si generó un nuevo proyecto utilizando Rails 3.2, también deberá comentar:

 config.active_record.mass_assignment_sanitizer = :strict 

y

 config.active_record.auto_explain_threshold_in_seconds = 0.5 

en su archivo development.rb .

Todo lo mencionado es cierto. La única cosa más que tuve que hacer en Rails 3.1 es comentar

 config.active_record.identity_map = true 

en config/application.rb .

Si está ejecutando rspec, también debe eliminar (en spec_helper):

  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures config.fixture_path = "#{::Rails.root}/spec/fixtures" 

y eliminar

  # If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, remove the following line or assign false # instead of true. config.use_transactional_fixtures = true 

También comente

 # config/application.rb config.active_record.whitelist_attributes = true 

(señalado en los Rails 3.2.13)