Удалите ActiveRecord в Rails 3 - PullRequest
       17

Удалите ActiveRecord в Rails 3

99 голосов
/ 06 февраля 2010

Теперь, когда бета-версия 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, чтобы использовать this gist для использования database.yml для деталей соединения MongoDB. Не уверен, почему он вообще должен иметь возможность инициировать соединение с БД только для того, чтобы генерировать контроллер ....

Кто-нибудь знает правильный способ Rails 3 сделать это?

Ответы [ 7 ]

155 голосов
/ 06 февраля 2010

Я пойду этим путем чтения источника, поэтому дайте мне знать, если это действительно работает. :)

Команда rails, которая генерирует шаблон приложения, теперь имеет опцию -O, которая указывает ей пропустить ActiveRecord.

Если вам не хочется перезапускать rails, вам следует проверить следующее в существующем приложении:

  • Убедитесь, что у вашего config/application.rb нет require 'rails/all' или require "active_record/railtie". Вместо этого для стандартной установки Rails без ActiveRecord он должен иметь only , для которого требуется следующее:

    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", например.

46 голосов
/ 18 мая 2013

Рельсы 4

Я искал, как отключить его в рельсах 4, и нашел только этот ответ, который больше не работает в рельсах 4. Так вот, как ты можешь это сделать в рельсах 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" (через https://stackoverflow.com/a/18087332/764342)

Надеюсь, это поможет другим, ищущим, как отключить ActiveRecord в Rails 4.

36 голосов
/ 19 декабря 2011

Для нового приложения rails вы можете исключить активную запись, указав параметр --skip-active-record. Например:

rails new appname --skip-active-record
15 голосов
/ 04 февраля 2012

Если вы сгенерировали новый проект с использованием Rails 3.2, вам также нужно будет закомментировать:

config.active_record.mass_assignment_sanitizer = :strict

и

config.active_record.auto_explain_threshold_in_seconds = 0.5

в вашем файле development.rb .

6 голосов
/ 27 мая 2011

Все вышеперечисленное верно. Еще одна вещь, которую я должен был сделать в rails 3.1, это закомментировать

config.active_record.identity_map = true

в config/application.rb.

2 голосов
/ 23 апреля 2013

Если вы используете 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
1 голос
/ 03 апреля 2013

Также комментарий out

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

(отмечено на рельсах 3.2.13)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...