Подтвердить что ты не робот

Удалить 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?

4b9b3361

Ответ 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)