2011-01-27 2 views
4

좋아, 레일스에 yaml_db을 사용하여 생성 된 다음 YAML 파일이 있습니다. 그래서 나의 레일 데이터베이스의 자동 생성 수출 기본적으로 :Ruby의 YAML은 큰 파일에서 첫 번째 레코드 만로드합니다. 이유가 무엇입니까?

--- 
admins: 
    columns: 
    - id 
    - username 
    - email 
    - encrypted_password 
    - password_salt 
    - sign_in_count 
    - current_sign_in_at 
    - last_sign_in_at 
    - current_sign_in_ip 
    - last_sign_in_ip 
    - failed_attempts 
    - unlock_token 
    - locked_at 
    - created_at 
    - updated_at 
    records: 
    - - 1 
    - 
    - [email protected] 
    - $2a$10$dZU50HD6paWS7EjKuWAruOFdwt9eqxiNTRh/D4sj8cqSzy5gjYd2i 
    - $2a$10$dZU50HD6paWS7EjKuWAruO 
    - 86 
    - 2011-01-27 07:37:45 Z 
    - 2011-01-26 13:27:13 Z 
    - 12.34.56.78 
    - 12.34.56.78 
    - 0 
    - 
    - 
    - 2010-12-23 09:20:46 Z 
    - 2011-01-27 07:37:45 Z 
    - - 2 
    - admin 
    - [email protected] 
    - $2a$10$3DML64hdCCvG90bnhIpN/unEEm6C.a9FqGrAFlFHU0.2D54DSQ1Ni 
    - $2a$10$3DML64hdCCvG90bnhIpN/u 
    - 1 
    - 2011-01-21 09:52:14 Z 
    - 2011-01-21 09:52:14 Z 
    - 12.34.56.78 
    - 12.34.56.78 
    - 0 
    - 
    - 
    - 2011-01-05 14:29:49 Z 
    - 2011-01-21 09:52:14 Z 

--- 
experiments: 
    columns: 
    - id 
    - description 
    - startdate 
    - enddate 
    - maps_base_URI 
    - maps_count 
    - queries_count 
    - proposals_count 
    - created_at 
    - updated_at 
....... 

지금 내가 함께 루비이 YAML 파일을로드 할 때 :

file = YAML.load(File.open("data-2011-01-27.yml")) 

그것은 첫째 admin보다 더로드되지 않습니다, 심지어 experiments :

ruby-1.9.2-p0 > file.keys 
=> ["admins"] 

ruby-1.9.2-p0 > file["admins"]["records"].count 
=> 1 

왜 그런가요? 자동 생성 된 .yml 파일이 구문 상 올바르다 고 가정합니다. rake:db:dumprake:db:load을 실행하면 잘 작동합니다.

답변

10

세 개의 하이픈 (---)은 여러 개의 문서를 구분합니다. 모두를로드하려면 YAML.load_stream을 참조하십시오.

documents = YAML.load_stream(open("data-2011-01-27.yml")).documents 
documents.map(&:keys) 
#=> [["admins"], ["experiments"]] 
+1

YAML.load_stream에 대한 링크가 더 이상 작동하지 않습니다. [load_stream] (http://ruby-doc.org/stdlib-1.9.3/libdoc/psych/rdoc/Psych.html#method-c-load_stream)에 대한 또 다른 문서가 있습니다. – slothbear

+0

이것은 Psych 구현에서만 작동하며 유일한 구현입니다 ... 1.8 및 1.9가 여전히 'syck' 구현을 지원하기 때문에 마침내 그들은 루비 2.x 용 워드 프로세서를 업데이트 할 수 있습니다. – akostadinov

관련 문제