Mam złożoną strukturę danych, taką jak: OrderedHash, klucze to daty, a wartości to uporządkowane haszy, które przechowują liczby całkowite z kluczami łańcuchowymi. Muszę je zserializować, aby przechowywać w db. Ale po to_yaml/YAML.load dane czasami ulegają uszkodzeniu — niektóre skróty drugiego poziomu są zastępowane przez skróty pierwszego poziomu lub odwrotnie. Czasami jednak nie jest zepsuty.
Reprezentacja yaml wygląda tak
- 2011-07-10: !omap
- 00:00-01:00: 0
- 01:00-02:00: 0
- 02:00-03:00: 0
- 03:00-04:00: 0
- 04:00-05:00: 0
- 05:00-06:00: 0
- 06:00-07:00: 0
- 07:00-08:00: 0
- *id010
- 09:00-10:00: 0
- 10:00-11:00: 0
- 11:00-12:00: 0
- 12:00-13:00: 0
- 13:00-14:00: 0
- 14:00-15:00: 0
- 15:00-16:00: 0
- 16:00-17:00: 0
- 17:00-18:00: 0
- 18:00-19:00: 0
- 19:00-20:00: 0
- 20:00-21:00: 0
- 21:00-22:00: 0
- 22:00-23:00: 0
- 23:00-23:59: 0
Ta część *id010/&id010 jest losowo wstawiana w różne miejsca kodu yaml. Myślę, że to jest przyczyną błędu.
Czy ktoś ma pojęcie, co jest nie tak z serializacją yaml? ruby 1.8.6, aktualizacja do 1.9 nie wchodzi w grę :(
2 odpowiedzi
Bardzo możliwe, że jest błąd. Uważam, że silnik YAML, którego używa Ruby 1.8, nazywa się Syck
, a ten kod został stworzony przez _why wiele lat temu. Od tego czasu kod nie był właściwie utrzymywany.
Ruby 1.9 ma używać nowego silnika o nazwie Psych
, ale nie jestem pewien, na ile jest on kompatybilny z Ruby 1.8.
Na Github znalazłem też inną alternatywę, która wygląda na to, że warto spróbować dla Ciebie:
https://github.com/cesare/ruby-libc-libyaml
Syck (możesz wypróbować tę wersję, ponieważ wygląda na to, że jest częściowo konserwowana): https://github.com/indeyets/syck
Psych (możesz też spróbować sprawdzić, czy działa w wersji 1.8):
https://github.com/tenderlove/psych
EDYTUJ
Może JSON mógłby być również dla Ciebie alternatywą? Spójrz na metodę to_json
i zobacz, czy można ją wykorzystać do twoich celów i być może w ten sposób obejść problemy YAML.
Uważam, że id010 jest tam, ponieważ możesz mieć jakąś strukturę rekurencji/samoodniesienia i to jest sposób na radzenie sobie z tym.
Podobne pytania
Nowe pytania
ruby-on-rails
Ruby on Rails to framework aplikacji internetowych typu open source z pełnym stosem, napisany w języku Ruby. Opiera się na popularnym modelu frameworkowym MVC i jest znany ze swojego podejścia do tworzenia aplikacji „konwencja zamiast konfiguracji”.