2010-01-07 5 views
5

Ich versuche, ein Datenbank-BLOB zu tauen, das mithilfe von Storable auf einem 64-Bit-Solaris- (Produktions-) Computer eingefroren wurde. Wenn ich versuche, auf einem 32-Bit-Windows (Entwicklungs-) PC zu tauen, erhalte ich den Fehler "Byte-Reihenfolge ist nicht kompatibel".Wie kann ich 32-Bit-Perl verwenden, um etwas gefrorenes mit 64-Bit-speicherbaren auftauen?

perl -v (on solaris) 
This is perl, v5.8.8 built for i86pc-solaris-64 

perl -v (on Windows) 
This is perl, v5.10.1 built for MSWin32-x86-multi-thread 

Genaue Fehler ist:

(Unable to read: Byte order is not compatible at blib\lib\Storable.pm (autosplit into blib\lib\auto\Storable\thaw.al) line 415, at ../handlers/Search/actions/SearchSendQueue.pm line 124) 

Linie 124 von SearchSendQueue.pm:

my $object = thaw($item->{object}); 

Weiß jemand, wie ich dieses Objekt auf der Maschine 32-Bit-auftauen kann?

Hinweis: Das Objekt ist gültig und funktioniert auf der 64-Bit-Produktionsmaschine. Ich habe bereits versucht "$ Storable :: interwork_56_64bit = 1;" wie in anderen Foren vorgeschlagen.

+1

Wenn es nur eine Byte-Bestellung Problem ist, könnten Sie versuchen, die Byte-Reihenfolge mit pack() umzukehren? – Ether

+1

Dies beantwortet nicht direkt Ihre Frage, aber 64-Bit-Intel-Maschinen sind billig und Solaris ist kostenlos. Selbst wenn Sie Windows hauptsächlich ausführen möchten, kann eine Solaris-Virtual Machine helfen. Ich bin ziemlich glücklich, dass ich mit einer Maschine auf fast jeder Plattform arbeiten kann. :) –

Antwort

8

Storable Dokumentation sagt:

Storable einen Dateikopf schreibt, die die Größen der verschiedenen C-Sprachtypen für den C-Compiler enthält, die Storable gebaut (wenn nicht in Netzwerk, um zu schreiben), und wird sich weigern, Dateien zu laden Geschrieben von einem Storable nicht auf der gleichen (oder kompatiblen) Architektur.

Im selben Abschnitt, schlagen sie vor, dass die grundlegende Verwendung der speicherbaren eine lokale und FAST Persistenzmethode ist. Sie können jedoch nstore verwenden, um die persistente Struktur in Netzwerk Byte-Reihenfolge zu speichern. Das Ergebnis wird sein, dass es langsamer liest und speichert, aber auf allen Plattformen funktioniert.

Der Vorschlag ist, dass Sie die 64-Bit-Maschine verwenden müssen, um die Daten in der Netzwerkreihenfolge zu lesen und erneut zu speichern, indem Sie nstore verwenden.

+0

Funktioniert das für 32/64-Bit-Lücken oder nur für Big-Endian/Little-Endian-CPUs? – fennec

+0

@fennec: Das sollte für komplett portable speicherbare Dateien funktionieren. Der Abschnitt, auf den verwiesen wird, befasst sich speziell mit 64-Bit-Architekturen. – Axeman

+0

Ich habe versucht, Tauwetter auf dem Produktionsserver zu vermeiden. Es schien jedoch der einzige Weg zu sein, also habe ich es getan. – uxnow

5

Ich weiß, dass die Dokumente anzeigen, dass es möglich sein soll, aber ich konnte es niemals zur Arbeit bringen, außer mit nfreeze/nstore * auf dem 64-Bit-Rechner.

Verwandte Themen