데이터베이스없이 Ruby on Rails를 구성하는 방법은 무엇입니까?


102

현재 데이터베이스가 필요없는 소규모 웹 사이트 프로젝트에 Ruby on Rails를 사용하는 것이 편리합니다. MySQL에서 빈 데이터베이스를 만들고 거기에서 갈 수 있다는 것을 알고 있지만 데이터베이스없이 Rails를 실행하는 더 좋은 방법을 아는 사람이 있습니까?

감사

답변:



108

들어 레일 3레일 4 :

데이터베이스없이 애플리케이션을 생성 하려면 -O(대문자 'O') 또는 --skip-activerecord옵션을 사용하십시오 .

rails new myApp -O

또는

rails new myApp --skip-activerecord

이 답변은 여기 에서 다시 공유됩니다 .


들어 레일 5 :

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

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

rails new myApp --skip-active-record


2
예, 이것은 Rails 4에서 작동합니다 :)-방금 검증되었습니다. 당신이 도랑 테스트 단위 사용하려면 : 새을 myApp-O --skip-번들 -T 레일
크리스 호우

1
이것은 (적어도 Rails 4.0.1에서는) 그 명령에서 active와 record 사이에 '-'가 있다는 경고를 받았지만 처음부터 시작하는 경우 가장 쉬운 방법입니다. 읽어야합니다 그래서 : 새을 myApp는 --skip-활성 기록을 레일
닉 벤더에게

1
나는 방금 문제에 직면했고 알아 차렸다. Rails 4.2.x의 경우에만 -O작동합니다. 옵션 --skip-activerecord이 작동하지 않습니다.
Nazar Hussain 2015

이것은 rails-api에서도 작동합니다 : rails new myApp -O. 감사합니다
Abel

2
누군가 궁금한 점이 있다면 Rails 5에서는 그렇습니다 --skip-active-record(활성 nad 레코드 사이의 대시에 유의하세요). 다른 방법은 나를 위해 작동하지 않습니다.
audiodude

53

기존 Rails 4/5/6 프로젝트의 경우 config/application.rb파일에 다음 행이 있습니다.

require 'rails/all' # or `require "rails"' in newer versions

(해당 행 이이 파일을 로드하고 있음을 참조 )
따라서 모두로드하는 대신 다음과 같이 각 라이브러리를 개별적으로로드해야합니다.

# active_record is what we're not going to use it, so comment it "just in case"
# require "active_record/railtie" 

# This is not loaded in rails/all but inside active_record so add it if
# you want your models work as expected
require "active_model/railtie" 
# And now the rest
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "active_job/railtie" # Only for Rails >= 4.2
require "action_cable/engine" # Only for Rails >= 5.0
require "sprockets/railtie"
require "rails/test_unit/railtie"

# All these depend on active_record, so they should be excluded also
# require "action_text/engine" # Only for Rails >= 6.0
# require "action_mailbox/engine" # Only for Rails >= 6.0
# require "active_storage/engine" # Only for Rails >= 5.2

Rails 버전과 관련하여 무엇을로드해야하는지 알기 위해 주석을 주시하십시오.
또한 다음 파일 (있는 경우)을 확인하고 다음 행을 주석 처리하십시오.

# package.json
"@rails/activestorage": "^6.0.0",

# app/javascript/packs/application.js
require("@rails/activestorage").start()

# bin/setup
system! 'bin/rails db:prepare'

# config/environments/development.rb
config.active_storage.service = :local # For Rails >= 5.2
config.active_record.migration_error = :page_load
config.active_record.verbose_query_logs = true

# config/environments/test.rb
config.active_storage.service = :test # For Rails >= 5.2

# config/environments/production.rb
config.active_storage.service = :local # For Rails >= 5.2
config.active_record.dump_schema_after_migration = false

# spec/rails_helper.rb
ActiveRecord::Migration.maintain_test_schema!

# test/test_helper.rb
fixtures :all # In case you're using fixtures

# Only for Rails >= 5.0
#config/initializers/new_framework_defaults.rb
Rails.application.config.active_record.belongs_to_required_by_default = true

또한 ActiveRecord::Base모델 파일에서 참조를 제거 하십시오 (또는 적용되는 경우 파일을 삭제하십시오). 예를 들어, 자동 생성 된 app/models/application_record.rb파일입니다.


2
레일 5의 경우 당신은 또한 필요로 할 수 있습니다 active_job/railtieaction_cable/engine
Ingmaras Keleras

2
사용할 더미 DB 어댑터가 database.yml없어서 DB를 무시합니까?
클로이

Rails 5는 active_record rake assets:precompile로 인한 실패 문제로 이어집니다 NoMethodError: undefined method .'` : /
flp

3
@Chloe는 activerecord-nulldb-adapter에서 github.com/nulldb/nulldb 임시 또는 덜 침습적 변화를위한 어댑터 밖으로 스왑을 수행 할 수 있습니다.
Unixmonkey

1
@cdmo 안녕하세요, 알아 주셔서 감사합니다. 내가와없는 2 레일 응용 프로그램을 만들 때 나는 레일하지 당신이 당신의 대답에 댓글을 달았 모든 약 6과 완전히 호환되도록 대답을 업데이 트했습니다 -Oaction_mailer관련되지 않은 config/detabase.yml그래서 그것을 언급 할 필요가 없습니다. 또한 주석 active_storage이 달린 후에 주석을 추가 할 줄 이 있습니다.
Alter Lagos

16

새로운 프로젝트를 시작할 때 Rails 4에서 -O 또는 --skip-active-record를 사용할 수 있습니다.

rails new my_project -O
rails new my_project --skip-active-record

이미 프로젝트를 생성했다면 댓글을 달아야합니다.

 require "active_record/railtie"

config / application.rb 및

 config.active_record.migration_error = :page_load

config / environments / development.rb에서


14

데이터베이스가 필요하지 않다면 Rails를 많이 사용할 필요가 없을 것입니다. 더 작은 크기의 사용자 정의 가능한 프레임 워크를 사용할 수 있습니다.

Sinatra 는 기본 정적 페이지를 제공하는 데 적합한 작은 프레임 워크입니다.

그러나 Rails 사용을 고집하는 경우 여기 또는 여기 에서 수행하는 방법을 보여주는 기사가 있습니다 .


감사합니다.이 두 링크는 ​​모두 Rails Recipes 책을 참조하며 데이터베이스가없는 Rails 애플리케이션으로 작업을 테스트하는 단계를 포함합니다. 나는 게으르고 다른 앱을 위해 이미 서버에있는 레일 인프라를 활용하기를 희망했지만 Sintatra는 흥미로워 보입니다.
RobbieCanuck

1
동의하지 않습니다. Active.com은 모든 데이터가 API에서 제공되기 때문에 데이터베이스없이 Rails에 구축됩니다.
jspooner 2013-08-06

참고 : 마지막 문장의 두 번째 링크는 더 이상 존재하지 않습니다. 404 찾을 수 없음 오류가 발생합니다.
Pamela Cook-LightBe Corp.

0

Rails 6 rc1 및 activerecord-nulldb-adaptergem을 지원 하려면 원숭이 패치가 필요합니다.

에서 설정 / 초기화 / null_db_adapter_monkey_patches.rb

module ActiveRecord
  module ConnectionAdapters
    class NullDBAdapter < ActiveRecord::ConnectionAdapters::AbstractAdapter
      def new_table_definition(table_name = nil, is_temporary = nil)
        TableDefinition.new(table_name, is_temporary)
      end
    end
  end
end
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.