Eliminar ActiveRecord en Rails 3


Ahora que ha salido Rails 3 beta, he pensado en reescribir una app en la que acabo de empezar a trabajar en Rails 3 beta, tanto para tener una idea como para tener un poco de ventaja. La aplicación utiliza MongoDB y MongoMapper para todos sus modelos y, por lo tanto, no necesita 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 - simplemente lanza 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 mirado arranque.rb como sugirió, pero por lo que puedo ver, no hay ninguna pista aquí en cuanto a cómo podría ir sobre la descarga de AR. La razón por la que necesito hacer esto es porque no solo es tonto cargar algo que no quiero, sino que se queja de su incapacidad para hacer una conexión de base de datos incluso cuando intento ejecutar un generador para un controlador. Esto se debe a que he borrado database.yml y lo reemplazé con detalles de conexión para MongoDB para usar este gist para usar la base de datos.yml para MongoDB detalles de conexión. No estoy seguro de por qué necesita ser capaz de iniciar una conexión de base de datos solo para generar un controlador de todos modos....

¿Alguien conoce la forma correcta de Rails 3 de hacer esto?

Author: mattmc3, 2010-02-06

7 answers

Voy por esto de leer la fuente, así que déjame saber si realmente funcionó. :)

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

Si no tiene ganas de volver a ejecutar rails, debe verificar lo siguiente en su aplicación existente:

  • Compruebe que su config/application.rb no tiene require 'rails/all' o require "active_record/railtie". En su lugar, para una configuración de Rails estándar sin ActiveRecord, debería tener solo lo siguiente 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 esto debería ser el valor predeterminado cuando g.orm se omite 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.

 155
Author: Stéphan Kochen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-16 15:35:46

Carriles 4

Estaba buscando cómo desactivarlo 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 gema del controlador de base de datos, por ejemplo, gem 'sqlite3' o gem 'pg'.
  • En config/application.po, sustitúyase require 'rails/all' por

    require "action_controller/railtie"
    require "action_mailer/railtie"
    require "sprockets/railtie"
    require "rails/test_unit/railtie"
    
  • En config / environments / development.rb, eliminar o comentar config.active_record.migration_error = :page_load

  • Potencialmente tienes que eliminar active_record helpers del spec_helper (a través de VenoM en los comentarios)

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

Espero que esto ayude a otros que buscan cómo deshabilitar ActiveRecord en Rails 4.

 45
Author: apeiros,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:09:11

Para una nueva aplicación rails, puede hacer que excluya active record especificando el parámetro skip skip-active-record. Eg:

rails new appname --skip-active-record
 36
Author: Jim Geurts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-18 22:56:07

Si ha generado un nuevo proyecto usando Rails 3.2, también tendrá que comentar:

config.active_record.mass_assignment_sanitizer = :strict

Y

config.active_record.auto_explain_threshold_in_seconds = 0.5

En su desarrollo .archivo rb.

 15
Author: vlad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-04 06:56:14

Todo lo anterior es cierto. Una cosa más que tenía que hacer en rails 3.1 es comentar

config.active_record.identity_map = true

En config/application.rb.

 6
Author: Michal Kuklis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-27 18:06:26

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
 2
Author: Rimian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-23 10:09:24

También comment out

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

(anotado en rails 3.2.13)

 1
Author: Andrew Lank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-03 15:01:24