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?
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 tienerequire 'rails/all'
orequire "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ónconfig.generators
, asegúrese de que no tenga la líneag.orm :active_record
. Puede establecer esto explícitamente ennil
, si lo desea, pero esto debería ser el valor predeterminado cuandog.orm
se omite por completo.Opcional, pero en su
Gemfile
, elimine la líneagem
que carga el módulo para su base de datos. Esta podría ser la líneagem "mysql"
por ejemplo.
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'
ogem 'pg'
. -
En config/application.po, sustitúyase
require 'rails/all'
porrequire "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.
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
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.
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
.
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
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)
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