2014-01-22 2 views
2

mysql 데이터베이스를 쿼리하려고합니다. database 요리 책을 사용하고 있으며 데이터베이스와의 연결을 설정할 수 있습니다. 데이터베이스에 정보를 쿼리하려고 했으므로 다른 리소스에 액세스 할 수 있도록 정보보다 어떻게 저장해야합니까? 쿼리 결과는 어디에 저장됩니까? 이건 내 조리법 : 루비 경험이없는 경우 사전저장 mysql 쿼리 정보 요리사

+0

: 예를 들어, 아래 SQL 서버에서 작동 쿼리 한 데이터에 어떤 리소스를 사용 하시겠습니까? – datelligence

+0

@datelligent'file/resource' 파일에서 사용할 수 있도록 쿼리에서 반환 된 정보로'etc/group' 파일을 업데이트하려고합니다. –

+0

그런 다음 [PHP file_put_contents] (http://php.net/)를 사용해야합니다. file_put_contents)를 사용하여 파일에 데이터를 추가하십시오. 또한 ** fwrite **를 사용할 수 있습니다. 일반적으로 파일을 만들고 쓰거나 열거 나 업데이트 한 다음 데이터를 저장하는 도구가 있습니다. – datelligence

답변

5

에서

mysql_database "Get admin users" do 
    connection mysql_connection_info 
    sql "Select * from #{table_name}" 
    action :query 
end 

감사합니다, 이건 정말 혼란 스러울 수 있습니다. 요리사 리소스에서 제공 업체의 결과를 "반환"할 방법이 없습니다. mysql_databaseChef::Recipe DSL 방법으로 런타임에 Chef::Provider::Database::Mysql으로 변환됩니다. 이 제공자는 defined in the cookbook입니다.

해당 공급자를 방문하는 데 시간이 조금 걸리면 db object을 사용하여 쿼리를 실행하는 방법을 확인할 수 있습니다. 쿼리의 결과을 얻으려면 래서 피에서 사용자 고유의 연결 객체를 생성하고 그에 대한 명령을 실행해야합니다. 예를

require 'mysql' 
db = ::Mysql.new('host', 'username', 'password', nil, 'port', 'socket') # varies with setup 

users = db.query('SELECT * FROM users') 

# 
# You might need to manipulate the result into a more manageable data 
# structure by splitting on a carriage return, etc... 
# 
# Assume the new object is an Array where each entry is a username. 
# 

file '/etc/group' do 
    contents users.join("\n") 
end 
+0

루비를 사용하여 덕분에 잘 처리 할 수있었습니다. –

0

위해 나는 좋은 오래된 요리사 :: 믹스 인 사용 찾기 : ShellOut/shell_out()이 작업에 매우 충분한을하며 (:) 당신은 당신의 SQL을 알고 가정) DB 무신론자입니다. 쿼리하는 모든 것이 하나의 값이면 특히 효과적입니다. 여러 행/열의 경우 SQL 쿼리 결과를 구문 분석해야합니다. 행 수, 열 머리글, 앞의 공백 문자 등을 결과 집합에서 숨겨서 원하는 쿼리 결과를 가져와야합니다.

단일 항목

so = shell_out!("sqlcmd ... -Q \"set nocount on; select file_name(1)\" -h-1 -W") 
db_logical_name = so.stdout.chop 

여러 행/열 (행 내의 값의 0 기반 위치가이 열이 무엇인지를 알려줍니다)

so = shell_out!("sqlcmd ... -Q \"set nocount on; select * from my_table\" -h-1 -W") 
rows_column_data = so.stdout.chop 
# columns within rows are space separated, so can be easily parsed