교환 Settingslogic을 목표로 하는 SettingsCabinet을 발명하였다

8080 단어 RailsRubygemtech

일의 발생


나는 바퀴를 다시 발명했다.
Rails 프로젝트에서 설정 관리에 자주 사용되는 gm에는 Settingslogic이 있다고 느낀다.
https://github.com/settingslogic/settingslogic
아주 잘 완성됐습니다. 루비젬스가 공개한 최신 버전 2.0.9[1]는 2012년 12월 공개[2]였지만 루비(MRI) 3.0도 작업하고 있습니다.
실행 중입니다.
네, 3.0까지입니다.
Rubby 3.1에서 YAML 백엔드 Psych가 4.0으로 변경되어 손상되었습니다.
자세한 내용은 여기서 잠시 접어두고, 다음은 지원을 위한 PR이지만 채택 여부가 의문이다.
https://github.com/settingslogic/settingslogic/pull/21
https://github.com/settingslogic/settingslogic/pull/22

어떻게


움직일 수 없는 것은 어쩔 수 없기 때문에 대응법을 연구했다.
이와 같은 패치[3]도 사용할 수 있지만, 개발되지 않은 패치를 계속 사용하는 것보다 다른 것으로 옮기는 게 낫다고 생각한다.
과도 목적지로서의 후보는 다음과 같은 두 가지가 있다
  • Rails 표준config_for 사용
  • config gem 사용
    https://github.com/rubyconfig/config
  • 1 단순히 해시가 되는 건 싫어
    2dry-*계의gem에 의존하기 때문에 의존관계가 큰 편[4]이 싫고, 설정 파일을 하나로 정리해야 하는 것 같기도 하고[5]도 싫습니다.

    오직 한 가지 할 일이 있다


    목적지 이동 후보가 좋지 않으면 한 번만 더 발명할 수 있기 때문에 바퀴의 재발명을 했다.
    이름이 SettingsCabinet입니다.
    Pretty Settings라는 이름으로 개발했지만 안 될 것 같아서 바꿨어요.
    https://github.com/yujideveloper/settings_cabinet
    https://rubygems.org/gems/settings_cabinet
    특별한 기능은 없지만 대체로 다음과 같은 느낌이다.
  • Settingslogic 바람의 사용 편의성
  • ERB를 사용할 수 있는 YAML의 설정 파일
  • DSL은 거의 동일
  • Dynamic settings[6] 지원되지 않음
  • 다양한 설정 파일 지원
  • 파일의 읽기 루트 보안 설정
  • 방법 및 Hash풍 액세스
  • 현재 상황에서 기타gem
  • 에 의존하지 않음
  • Refinements를 이용한 설치[7]
  • config/settings.yml
    defaults: &defaults
      foo: 1
      bar: <%= 2 * 2 %>
      date: 2022-04-24
      time: 2024-04-24T12:34:56+09:00
      symbol: :symbol
      nested:
        child: "child"
    
    development:
      <<: *defaults
      foo: 2
    
    test:
      <<: *defaults
      foo: 3
    
    production:
      <<: *defaults
      foo: 4
    
    config/settings.rb
    class Settings < SettingsCabinet::Base
      using SettingsCabinet::DSL
      
      source Rails.root.join("config/settings.yml")
      namespace Rails.env
      permitted_classes [Date, Time, Symbol]
    end
    
    # RAILS_ENV=development
    Settings.foo #=> 2
    
    Settings.nested.child #=> "child"
    

    이렇게 바꿨어요.


    셋팅스logic에서 셋팅스캐비넷으로 바꿔 무난하게 움직였다.[8]

    끝맺다


    가능하다면 한번 써볼 수 있다면 기쁠 거예요.
    나는 언젠가 내가 KMS를 지지할 것이라고 생각한다.의욕만 있다.
    각주
    https://rubygems.org/gems/settingslogic/versions/2.0.9 ↩︎
    GiitHub의 최종 업데이트는 2014년 8월https://github.com/settingslogic/settingslogic/commit/463073f8c42fa9b5d976ccd5b8c98f433a18f42e↩︎입니다.
    Settingslogic의 코드 기초는 매우 작아서 앞으로 다른 문제가 발생하더라도 처리할 수 있다↩︎
    검증 시스템의 기능을 사용하면 괜찮지만 사용 계획이 없고 의존 관계가 적은 것이 좋다↩︎
    설정한 종류별로 분류하고 싶을 때도 있죠↩︎
    https://github.com/settingslogic/settingslogic/tree/463073f8c42fa9b5d976ccd5b8c98f433a18f42e#4-optional--dynamic-settings- ↩︎
    장서 때문에 파일 키 설정에 사용할 이름을 줄이고 싶지 않습니다↩︎
    이렇게 말하지만 이 글을 쓸 때 아직 제작사에서 발표하지 않았다↩︎

    좋은 웹페이지 즐겨찾기