Удалить ActiveRecord в Rails 3
Теперь, когда бета-версия Rails 3 отсутствует, я подумал, что взглянул бы на переписывание приложения, с которым я только что начал работать в бета-версии Rails 3, чтобы почувствовать это и получить немного начало, Приложение использует MongoDB и MongoMapper для всех своих моделей и поэтому не нуждается в ActiveRecord. В предыдущей версии я выгружаю activerecord следующим образом:
config.frameworks -= [ :active_record ] # inside environment.rb
В последней версии это не сработает - оно просто выдает ошибку:
/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*
Конечно, я посмотрел на boot.rb, как он и предложил, но, насколько я вижу, нет никакой подсказки относительно того, как я могу разгрузить AR. Причина, по которой мне нужно это сделать, - это не только глупо загружать то, что я не хочу, но и жалуется на его неспособность сделать соединение с БД, даже когда я пытаюсь запустить генератор для контроллера. Это связано с тем, что я стирал database.yml
и заменил его данными о соединении для MongoDB, чтобы использовать этот смысл для использования database.yml для MongoDB подробности о соединении. Не уверен, почему он должен иметь возможность инициировать соединение с БД вообще, чтобы генерировать контроллер в любом случае....
Кто-нибудь знает о правильном способе Rails 3?
Ответы
Ответ 1
Я иду от чтения источника, поэтому дайте мне знать, действительно ли это работает.:)
Команда rails
, которая генерирует шаблон приложения, теперь имеет опцию -O
, которая сообщает ему пропустить ActiveRecord.
Если вам не нравится повторное использование rails
, вы должны проверить следующее в своем существующем приложении:
-
Убедитесь, что config/application.rb
< не имеет require 'rails/all'
или require "active_record/railtie"
. Вместо этого для стандартной настройки Rails без ActiveRecord она должна иметь только, для чего требуется следующее:
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
-
Если в config/application.rb
вы используете раздел config.generators
, убедитесь, что у него нет строки g.orm :active_record
. Вы можете установить это явно на nil
, если хотите, но это должно быть значение по умолчанию, когда g.orm
полностью опущено.
-
Необязательно, но в Gemfile
удалите строку gem
, которая загружает модуль для вашей базы данных. Например, это может быть строка gem "mysql"
.
Ответ 2
Rails 4
Я искал, как отключить его в рельсах 4, и нашел только этот ответ, который больше не работает в рельсах 4. Так вы можете сделать это в rails 4 (проверено в RC1).
В новом проекте
rails new YourProject --skip-active-record
В существующем проекте
- В Gemfile удалите камень драйвера базы данных, например.
gem 'sqlite3'
или gem 'pg'
.
-
В config/application.rb замените require 'rails/all'
на
require "action_controller/railtie"
require "action_mailer/railtie"
require "sprockets/railtie"
require "rails/test_unit/railtie"
-
В config/environment/development.rb удалите или закомментируйте config.active_record.migration_error = :page_load
-
Потенциально вам нужно удалить помощники active_record из spec_helper (через VenoM в комментариях)
-
Потенциально вам нужно удалить промежуточное ПО ConnectionManagement (похоже, с единорогом): config.app_middleware.delete "ActiveRecord::ConnectionAdapters::ConnectionManagement"
(через fooobar.com/questions/58079/...)
Надеюсь, это поможет другим людям узнать, как отключить ActiveRecord в Rails 4.
Ответ 3
Для нового приложения rails вы можете отключить активную запись, указав параметр -skip-active-record. Например:
rails new appname --skip-active-record
Ответ 4
Если вы создали новый проект с использованием Rails 3.2, вам также нужно будет прокомментировать:
config.active_record.mass_assignment_sanitizer = :strict
и
config.active_record.auto_explain_threshold_in_seconds = 0.5
в файле development.rb.
Ответ 5
Все вышесказанное верно. Еще одна вещь, которую я должен был сделать в rails 3.1, - это прокомментировать
config.active_record.identity_map = true
в config/application.rb
.
Ответ 6
Если вы используете rspec, вам также нужно удалить (в spec_helper):
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
и удалите
# 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
Ответ 7
Также комментарий out
# config/application.rb
config.active_record.whitelist_attributes = true
(отмечено на рельсах 3.2.13)