2013-05-20 2 views
4

각 루비 파일의 맨 위에 연결 문자열을 배치 할 필요없이 데이터베이스에서 데이터를 가져 오는 방법을 찾으려고합니다.ruby ​​/ sinatra에서 tiny_tds 연결을 database.yml (또는 기타)를 통해 어떻게 참조 할 수 있습니까?

저는 MSSQL 데이터베이스에서 데이터를 가져 오는 작은 Sinatra 앱을 통해 루비의 기본 사항을 배우고 있습니다.

는 지금까지 각 파일의 맨 위에 다음 코드 구조를 사용하여 MSSQL 데이터베이스에서 데이터를 표시하는 다양한 간단한 ERB 페이지 생성 관리했습니다 : - 책, 가이드에서

<% client = TinyTds::Client.new(:username => 'name', :password => 'password', :dataserver => 'hostname', :database => 'database') %> 

<% data = client.execute("SELECT * from tablename") %> 

및 온라인 튜토리얼 PostgreSQL 또는 MySQL 데이터베이스와 관련하여 많은 설정을 기반으로하는 것으로 보았습니다. 연결 데이터 (예 : database.yml 파일)를 저장하고 그 곳을 참조하는 중앙 파일을 생성해야합니다. 어쨌든 내 앱에서.

내 main.rb 파일에서 각 .erb 파일에 연결 문자열이 필요하지 않거나 각 .erb 파일의 데이터베이스를 계속 참조해야하므로 올바른지 확인해야합니다. 또한?

I는 다음과 같은 데이터베이스 구성 변수를 생성에 대한 참조를 언급했습니다 : -

db_config = YAML.load(File.Open("/path_to_file/database.yml")) [ENV['RAILS_ENV']] 

하지만 분명히 레일 애플 리케이션에 적합 보인다.

내 sinatra 주도 '앱'과 비슷한 것을 할 수 있습니까?

감사합니다.

+1

[Sinatra Config File] (http://www.sinatrarb.com/contrib/config_file.html)을보십시오. 학습을 위해이 도구를 직접 시험해보고 싶을 수도 있습니다. 말할 수 있으면 아래에서 좀 더 자세한 답변을 얻을 수있을 것입니다. BTW,'YAML'도'load_file' 메소드를 가지고 있습니다. 왜 모든 레일즈 어플리케이션이'File.open'으로'load'를 계속 사용하는지 모르겠습니다. – iain

+0

감사합니다 이안, 나는 당신이 제공 한 링크를 통해 읽어 보았습니다. 나는 그것이 나에게 도움이되는 방법을 모르지만 아직 설정 파일을 설정하고 데이터베이스 커넥션을 생성하기 위해 값을 가져 오는 것 사이에서 도약 할 수는 없다 ... – lad33

+0

... 나는 내가 무엇을 하려는지 생각한다. 말, 좋아, 나는 내 데이터베이스 연결 설정을 config.yml 파일에 넣고 내 main.rb 파일에서 참조 할 수있다. 그렇다면 어떻게 클라이언트 = TinyTds.Client.new (......)를 만들면 main.rb 앱 파일에도 포함됩니까? – lad33

답변

1

이 작동합니다 :

그래도 제안 무엇
require "sinatra" 
require "sinatra/config_file" 

config_file 'path/to/config.yml' 

DB = TinyTds::Client.new(
    :username => settings.name, 
    :password => settings.password, 
    :dataserver => settings.hostname, 
    :database => settings.database 
) 

get '/' do 
    @result = DB.do_stuff 
    haml :index 
end 

, 당신은 TinyTDS을 지원하고 쿼리를 데이터베이스 연결을 설정하고 실행하는 데 그것을 사용 ORM 찾는 것입니다. 나는 Sequel을 많이 사용하고 I know it supports TinyTDS을 사용하지만 다른 사람들도 그렇게 할 것이라고 확신합니다.

중요한 정보이므로 소스 컨트롤에 체크 인 된 파일에 데이터베이스 설정 같은 것을 넣지 않는 것이 좋습니다. 나는 이런 종류의 것을 생산을위한 환경 변수에 넣는 것을 선호하며, 환경 파일을 사용하여 환경 변수를로드한다 (편의상). 위의 예를 사용 :

DB = TinyTds::Client.new(
    :username => ENV["name"], 
    :password => ENV["password"], 
    :dataserver => ENV["hostname"], 
    :database => ENV["database"] 
) 

변수가 그들에게 조금 더 안전하게 프로덕션 서버의 메모리에로드되는 그 ENV가. 개발을 위해 Sinatra를 시작하기 전에 YAML 파일을로드하고 각 값을 ENV var에 추가합니다. 나는 이것이 표준 방법이라고 제안하는 것이 아니지만 그것이 내가하는 방법이다.

+0

감사합니다 이안, 이것은 훌륭한 충고이며 환경 변수를 사용하는 것은 내가 할 수 있기를 바라고있는 일이었습니다! – lad33

+0

오늘 Sequel에 대해서도 읽었습니다. 멋져 보이고 환상적인 제안입니다. 다시 한 번 감사드립니다. – lad33

+0

@ lad33 아무런 문제가 없으니 다행 스럽습니다. – iain