Rails 4 용 ActiveRecord 비활성화


113

Rails 4에서 ActiveRecord를 비활성화하고 싶습니다. config/application.rb

require File.expand_path('../boot', __FILE__)

# require 'rails/all'  -- commented

require "action_controller/railtie"
require "action_mailer/railtie"
#require "active_resource/railtie" no need
#require "rails/test_unit/railtie" no need
#require "sprockets/railtie" no need

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(:default, Rails.env)

module MyApp
  class Application < Rails::Application
     config.app_middleware.delete "ActiveRecord::ConnectionAdapters::ConnectionManagement"
  end
end

나는 오류가 있습니다.

/home/alex/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/railtie/configuration.rb:95:in 
  method_missing: undefined method active_record for #<Rails::Application::Configuration:0x00000002005c38> (NoMethodError)

4
rails new ... -OActiveRecord를 비활성화 하는 데 사용하지 않습니까?
Yevgeniy Anfilofyev 2013 년

app_middleware.delete가 필요합니까? 문제가 발생할 수도 있습니까?
house9 2013-09-29

기존 레일 4/5/6 앱의 경우이 답변에 따라 활성 레코드를 비활성화 할 수 있습니다.
Alter Lagos

답변:


261

새 애플리케이션을 만드는 경우를 사용 -O하여 ActiveRecord를 건너 뛸 수 있습니다 .

rails new my_app -O

기존 애플리케이션의 경우 :

1. Gemfile (mysql2, sqlite3 등)에서 데이터베이스 어댑터 gem을 제거합니다.

2. 변경 config/application.rb

require 'rails/all라인을 제거 하고 사용 하려는 프레임 워크 ( 사용자 rails버전 에서 사용할 수 있는 프레임 워크 중에서 목록은 다양하며 복사 만하지 않음)를 요구합니다. 예를 들면 다음과 같습니다.

require "action_controller/railtie"
require "action_mailer/railtie"
require "sprockets/railtie"
require "rails/test_unit/railtie"

제거 config.active_record.raise_in_transactional_callbacks = true에서config/application.rb

3. config/database.yml파일 db/schema.rb및 마이그레이션 (있는 경우) 삭제

4. 마이그레이션 체크인 삭제 test/test_helper.rb

5. config/environments파일 에서 ActiveRecord 구성을 삭제 합니다 (이로 인해 오류가 발생 함).

이것이 비어있는 Rails 앱에 필요한 모든 것입니다. 기존 코드로 인해 문제가 발생하면 스택 추적을 통해 변경해야 할 사항에 대한 충분한 정보를 얻을 수 있습니다. 예를 들어 이니셜 라이저에 ActiveRecord 구성이있을 수 있습니다.


2
이러한 변경 사항 외에도 spec_helpers.rb (RSpec 사용)에서 조명기 및 트랜잭션에 대한 몇 줄을 제거해야했습니다. 또한 active_model을 사용하고 있었기 때문에 여기에서 필요 목록에서 active_record를 active_model로 대체했습니다. stackoverflow.com/questions/19078044/…
arnab

3
'rails / all'대신 필요한 사용 가능한 Rails 프레임 워크 목록은 어디에서 볼 수 있습니까?
emilesilvis

18
require 'rails/all'포함 된 모든 목록은 여기 에서 찾을 수 있습니다 .
nates

3
rails new my_app -O한 달 전에 응용 프로그램을 만들었습니다 . 이제 활성 레코드를 다시 원합니다. 지금 추가해야하는 파일 / 보석 / 구성은 무엇입니까?
Jak

1
나는 또한에서 제거해야 config.active_record.raise_in_transactional_callbacks = true했다 config/application.rb.
B Seven

15

안녕하세요 이것은 기본 레일 new new_app -O가 제공하는 것입니다.

require "rails"
# Pick the frameworks you want: 
require "active_model/railtie" 
require "active_job/railtie"
# require "active_record/railtie" 
require "action_controller/railtie" 
require "action_mailer/railtie" 
require "action_view/railtie" 
require "sprockets/railtie" 
require "rails/test_unit/railtie"

config / application.rb 내부

또한, 그것은없이 제공 database.yml을 하고 NO dB / 마이그레이션 / *schema.rb


4
레일 5 <= 추가require "action_cable/engine"
rails_id

7

Rails 5에 대한 활성 레코드를 비활성화하기 위해 Google을 검색 할 때 이것이 여전히 첫 번째 히트이므로 여기에 추가하겠습니다.

Rails 5의 경우

@mechanicalfish 답변의 모든 단계를 수행하고 줄도 제거하십시오.

Rails.application.config.active_record.belongs_to_required_by_default = true

...에서

config/initializers/new_framework_defaults.rb

5

rails-api gem 을 사용하는 사람들의 경우를 --skip-active-record할 때 플래그를 사용할 때 비슷한 오류가 발생할 수 있습니다 rails-api new my_api. 현재 수정 사항 (새로 수정 된 gem 버전이 출시 될 때까지)은 rails-api gem을 수정 하여이 커밋 을 갖도록 하는 것 입니다. 사용 bundle open및 이전을 대체 할 Gemfile새로운으로 하나를 수정했습니다. 다시 실행하면 모든 설정이 완료됩니다.


4

Rails 4.2에서 ActiveRecord를 비활성화하려면 config / initializers / middleware.rb를 생성 할 수 있습니다.

Rails.application.middleware.tap do |middleware|
  middleware.delete ActiveRecord::Migration::CheckPending
  middleware.delete ActiveRecord::ConnectionAdapters::ConnectionManagement
  middleware.delete ActiveRecord::QueryCache
end

터미널 레이크 미들웨어보기


4

Rails 5 :

새 앱을 생성하는 경우

--skip-active-record옵션을 사용 하여 데이터베이스없이 애플리케이션을 생성 하십시오 .

rails new myApp --skip-active-record

이전 버전의 Rails와 달리 추가 하이픈 '-'를 확인하세요.


1
활성 레코드를 건너 뛰지 않고 이미 프로젝트를 생성 한 경우 config / environments / # config.active_record.verbose_query_logs = true # config.active_record.migration_error = : page_load에있는 모든 active_record 참조를 주석 처리하고 database.yml 파일의 이름을 다른 이름으로 바꿉니다. . 그것은 나를 위해 그것을했다.
Juan Ricardo

1
또한 bin / setup => # system! '설정 빈은 / DB를 레일'
후안 리카르도

1

spec/dummy앱 이있는 Rails 플러그인 (또는 gem)의 경우

Rails 앱이 spec/dummy있고 플러그인 루트 디렉토리에서 서버를 시작할 때. 다음과 같은 오류가 계속 발생할 수 있습니다.

Cannot load `Rails.application.database_configuration`: Could not load database configuration. No such file - ["config/database.yml"] 

이를 방지하려면 require rails/all파일 내부를 제거 bin/rails하고 사용할 프레임 워크가 필요합니다. 예를 들면 다음과 같습니다.

# Pick the frameworks you want: 
require "active_model/railtie" 
require "active_job/railtie"
# require "active_record/railtie" 
require "action_cable/engine"
require "action_controller/railtie" 
require "action_mailer/railtie" 
require "action_view/railtie" 
require "sprockets/railtie" 
require "rails/test_unit/railtie"

-1

Ruby On Rails 버전 5.1.x의 경우

require "rails"
# Pick the frameworks you want:
require "active_model/railtie"
require "active_job/railtie"
# require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "action_cable/engine"
require "sprockets/railtie"
require "rails/test_unit/railtie"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.