Удалить Activerecord в Rails 3
-
19-09-2019 - |
Вопрос
Теперь, когда Beta Rails 3 вышла, я подумал, что посмотрю на переписывание приложения, над которым я только что начал работать в Beta 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. Не уверен, почему он должен быть в состоянии инициировать соединение БД вообще, чтобы в любом случае генерировать контроллер ....
Кто -нибудь знает о правильных рельсах 3 способа сделать это?
Решение
Я иду на это от прочтения источника, так что дайте мне знать, если это действительно сработало. :)
А rails
Команда, которая генерирует шаблон приложения, теперь имеет опцию -O
, что говорит это пропустить Activerecord.
Если вы не чувствуете себя как повторный rails
, вы должны проверить следующее в вашем существующем приложении:
Убедитесь, что ваш
config/application.rb
не имеютrequire 'rails/all'
или жеrequire "active_record/railtie"
. Анкет Вместо этого для стандартной установки рельсов без 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"
Например.
Другие советы
Рельсы 4
Я искал, как отключить его в Rails 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.active_record.migration_error = :page_load
Потенциально вам придется удалить помощников Active_record из spec_helper (через яд в комментариях)
Возможно, вам придется удалить промежуточное программное обеспечение для управления соединением (кажется, имеет место с единорогом):
config.app_middleware.delete "ActiveRecord::ConnectionAdapters::ConnectionManagement"
(с помощью https://stackoverflow.com/a/18087332/764342)
Я надеюсь, что это поможет другим искать, как отключить Activerecord в Rails 4.
Для нового приложения Rails вы можете исключить его активную запись, указав параметр-skip-active-рекорд. Например:
rails new appname --skip-active-record
Если вы создали новый проект с помощью Rails 3.2, вам также нужно будет прокомментировать:
config.active_record.mass_assignment_sanitizer = :strict
а также
config.active_record.auto_explain_threshold_in_seconds = 0.5
в твоей Development.rb файл.
Все вышеперечисленное верно. Еще одна вещь, которую я должен был сделать в Rails 3.1, - это прокомментировать
config.active_record.identity_map = true
в config/application.rb
.
Если вы запускаете 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
Также комментарий вне
# config/application.rb
config.active_record.whitelist_attributes = true
(отмечается на рельсах 3.2.13)