2011-03-21 4 views
1

저는 Ruby에서 주로 PHP/SQL로 웹 개발을하는 초보자입니다. 내 응용 프로그램에서 환경 설정을 저장하는 방법에 대해 생각하고있었습니다. 예를 들어, 경로를 default_path으로 저장하고 사용자가 응용 프로그램을 다시 시작할 때이 경로를 설정하려는 경우응용 프로그램의 환경 설정을 저장하는 방법은 무엇입니까?

웹 세계에서 아마도 데이터베이스 또는 XML에이를 저장합니다. 독립 실행 형 응용 프로그램의 경우 데이터베이스가 과도하게 보입니다. 하지만 나는 XML/YAML/Other-Write-Format이 확실한 방법이 아닙니다. 그렇다면 이러한 환경 설정은 어디에 저장해야합니까? 예를 들어, Mac에서 ~/Library/MyAppName에 있어야합니까?

+0

이 응용 프로그램은 데스크탑 응용 프로그램입니까? –

답변

1

Ruby는 Marshaling이라는 데이터를 저장하는 또 다른 방법을 제공합니다. 이렇게하면 클래스/객체를 파일에 저장하고 나중에 다시 구성 할 수 있습니다. 모든 사용자 기본 설정이 단일 객체에 저장되어 있거나 필요한 모든 데이터를 저장할 수있는 객체를 만들면 가져 오기/내보내기 루틴을 텍스트 기반 객체로 작성하는 대신 데이터를 마샬링하는 것이 가장 쉽습니다. 추가 라이브러리 나 보석을 가져 오려고하는 경우.

데이터를 저장할 디스크의 위치는 귀하에게 달려 있습니다. 대부분의 플랫폼에는 단일 사용자 또는 모든 사용자가 사용할 수 있는지 여부에 따라 응용 프로그램 데이터를 저장하기위한 표준 위치가 있습니다. 일반적으로 선택한 대상 플랫폼에서 일반적인 관행을 따르는 것이 가장 안전합니다.

업데이트 : 아마이 될 것 마샬링의 간단한 example은 : 당신이 클래스를 사용하면 사용자 환경 설정을 모두 저장하는 데 사용할 UserPrefs라는이 있다고 말한다. 당신은 파일에 환경 설정 데이터를 저장하기 위해 다음과 같은 코드를 사용할 수 있습니다 :이 시점에서

# Load prefs from file 
my_prefs = nil 
File.open("user_prefs.data", "rb") {|f| my_prefs = Marshal.load(f)} 

:

my_prefs = UserPrefs.new 
# ... Fill in the 'my_prefs' object with the user's preferences, etc ... 

# Store the object into a file 
File.open("user_prefs.data", "wb") do |file| 
    Marshal.dump(my_prefs, file) 
end 

응용 프로그램을로드 다음에, 다음과 같은를 사용하는 기본 설정을 복원 할 수 있습니다 my_prefs 개체는 마샬링 코드를 처음 실행했을 때와 완전히 동일해야합니다. 이것은 본질적으로 한 시점에서 (예를 들어, 프로그램이 종료 될 때) 객체의 스냅 샷을 가져 와서 나중에 복원합니다 (예 : 프로그램이로드 될 때). 내부적으로 구조체의 모든 데이터는 단일 문자열로 인코딩되며이 문자열은 디스크에 저장됩니다. 마샬 모듈은 인코딩과 디코딩을 처리합니다.

Here은 마샬링을 사용하여 데이터를 저장하고 검색하는 또 다른 예입니다.

마샬 모듈에 내장 된 기본 인 코드/디코드 루틴은 일반적으로 대부분의 데이터 저장 클래스에 충분합니다. 특히 복잡한 클래스에는 문제가있을 수 있으며, 그렇다면 자체 인코딩 및 디코딩 메서드를 정의 할 수 있습니다 (first link에는 사용자 지정 메서드 정의 예제가 포함되어 있습니다).

그러나 데이터 형식 중 일부는 일반적으로 Ruby 세션에서 지속되지 않으므로 마샬링 할 수 없습니다 (파일 열기 핸들, Proc 개체 등). Marshal이 좋아하지 않는 멤버가 포함 된 클래스를 마샬링해야하는 경우 사용자 지정 인코딩/디코딩 함수를 사용하여 나머지 클래스를 마샬링하고 문제가있는 멤버를 생략 할 수 있습니다.

+0

그게 좋은 옵션 같아. 그러나 내가하고자하는 일에 가깝고 그걸 사용하는 방법을 이해하는 데 어려움을 겪고 있습니다. 친절하게도 마샬링에 대해 더 많이 배우고 환경 설정을 저장하는 데 사용할 수있는 참조 (예 : URL)를 찾을 수 있습니까? 마샬링은 데이터를 저장하는 것뿐만 아니라 많은 것들에 사용될 수있는 것 같습니다. – maetthew

+0

@ maetthew- 일부 추가 링크 및 샘플 코드에 대한 최신 답변을 확인하십시오. – bta

2

YAML은 많은 언어로 읽기/쓰기가 매우 쉽기 때문에 YAML을 사용하는 것이 좋으며 여러 앱이 동일한 구성 정보를 공유 할 수 있습니다. 잘 문서화 된 표준이므로 데이터가 구멍에 떨어질 확률은 거의 없습니다.

또한 인간이 이해하기 쉽고 특별한 도구를 사용하지 않기 때문에 미세 조정 또는 특수 동작을 위해 앱에서 가끔씩 변경 될 수있는 모든 데이터에 적합합니다. .

주기적으로 YAML 파일의 수정 시간을 확인하는 작은 크리에이티브 코딩을 사용하면 환경 설정 파일의 조정으로 애플리케이션의 행동을 즉시 수정할 수 있습니다. 나는 변화를 위해 셧다운하고 그 행동을 설정하기를 원하지 않는 커다란 앱을 가지고 있었다. 그것은 3 주 연속적으로 실행되었고, 설정 파일을 통해 작동 매개 변수를 조정했습니다. 매분마다 파일을 읽고 해당 매개 변수의 변경 사항을 즉시 상속받습니다.

데이터베이스는 중앙 집중식 서버 또는 웹 기반 앱인 경우 매개 변수/기본 설정을 저장하는 좋은 방법입니다. 개별 컴퓨터에서 실행되는 무언가에 대해서는 아무런 의미가 없습니다.

+0

답변 해 주셔서 감사합니다! 아주 훌륭하고 훌륭한 대답입니다. @bta가 마샬링을 사용하여 환경 설정을 저장하는 좋은 참조를 찾을 수 없다면 가장 좋은 대답입니다. 그렇지 않으면 나는 하루나 이틀 만에 이것을 받아 들일 것입니다. – maetthew

+1

오 대단합니다. 이베이와 같은 입찰 전쟁입니다. 글쎄요, YAML은 XML이나 JSON과는 달리 이런 종류의 문제를 해결했다는 것을 기억하십시오. :-) –

0

몇 가지 응용 프로그램을 사용하여 보았습니다 ruby gconf2

관련 문제