Problem mit Date.civil -> invalid date

Hallo allerseits,

ich komme als Rails-Anfänger bei folgendem Problem (Testcase) nicht
weiter:

Ich verwende im Source eines Controllers die Funktion Date.civil mit
konstanten Zahlen, um ein Datum zu erzeugen. Beim ersten Versuch klappt
es. Beim zweiten Versuch liefert der Interpreter den Fehler ‘invalid
date’.

Hier der Ausschnitt aus dem Controller:

abc = Date.civil(1990,1,1)
puts ‘geht doch: ’ + abc.to_s + ’ *************’
abc = Date.civil(1970,1,1)
puts ‘geht doch: ’ + abc.to_s + ’ *************’
abc = Date.civil(1900,1,1)
puts ‘geht doch: ’ + abc.to_s + ’ *************’

Ablauf:

  1. submit in der View -> Source im Controller wird sauber ausgeführt
  2. View erneut aufrufen (über F5 oder Enter in der Adresszeile)
  3. submit in der View -> ‘invalid date’

Das Spiel kann ich wiederholen, nachdem ich Mongrel neu gestartet habe.

Ich habe absolut keine Idee mehr, an was das liegen könnte. Ein
Ruby-Testprogramm funktioniert einwandfrei.

Grüsse
Joachim

ja hallo erstmal,…

Am Sonntag, 20. Januar 2008 schrieb Joachim Mützel:

Hallo allerseits,

ich komme als Rails-Anfänger bei folgendem Problem (Testcase) nicht
weiter:

Ich verwende im Source eines Controllers die Funktion Date.civil mit
konstanten Zahlen, um ein Datum zu erzeugen. Beim ersten Versuch klappt
es. Beim zweiten Versuch liefert der Interpreter den Fehler ‘invalid
date’.

abc = Date.civil(1990,1,1)
  puts ‘geht doch: ’ + abc.to_s + ’ *************’

Meinst Du beim ersten vollständigen Durchlaufen, oder bei der ersten
abc =
Date.civil(1990,1,1) Anweisung?

Btw. Welches Betriebssystem verwendest Du?

Keep smiling
yanosz

Hallo Jan,

es funktioniert komplett beim ersten vollständigen Durchlaufen.

Meine Umgebung:
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
MS Windows XP Home Version 2002 SP2

Gruß
Joachim

Ich habe die Infos zur Exception angehängt.

Beim ersten Durchlauf klappt es auch mit 1.1.1900.
Beim zweiten Lauf hängt das Programm bei Zeile 13:
abc = Date.civil(1990,1,1)

Gruß
Joachim

ja hallo erstmal,…

Am Sonntag, 20. Januar 2008 schrieb Joachim Mützel:

Hallo Jan,

es funktioniert komplett beim ersten vollständigen Durchlaufen.

Meine Umgebung:
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
MS Windows XP Home Version 2002 SP2

Puh - zwei Dinge fallen mir spontan ein

  • Dein Ruby ist eher alt - aktuell ist glaube ich 1.8.6 Patchlevel 111.
  • abc = Date.civil(1900,1,1) liegt eigentlich außerhalb des Bereichs
    den
    Windows darstellen kann. Ich würde ich schon mal Fehler erwarten - (gut
    das
    erklärt nicht den erfolgreichen ersten Durchlauf…)

Ich würde mal testweise versuchen, das Datum in eine Region zu
versetzen, die
auf Win32 darstellbar ist (also > 1.1.1970) oder auf einem 64-Bit Unix
testen…

Wie ist den der Stacktrace Deiner Exception? Welcher Code wirft die
Zeile
invalid date?

Keep smiling
yanosz

ja hallo erstmal,…

Am Sonntag, 20. Januar 2008 schrieb Joachim Mützel:

Ich habe die Infos zur Exception angehängt.

Beim ersten Durchlauf klappt es auch mit 1.1.1900.
Beim zweiten Lauf hängt das Programm bei Zeile 13:
abc = Date.civil(1990,1,1)

Attachments:
http://www.ruby-forum.com/attachment/1331/Action_Controller_Exception_caugh
t_20080120.pdf

Im Grunde genommen, halte ich zwei Dinge für möglich:

  • Du übergibst nil. Das klingt nach Deiner Schilderung absurd, mag auch
    so
    sein, ergibt diesen Fehler.
  • Irgendwelche Seiteneffekte treten auf. Hier wäre es interessant zu
    wissen,
    wass passiert, wenn Du Deine Datumskonstanten auf nach dem 1.1.1970
    legst.

Keep smiling
yanosz

Im Grunde genommen, halte ich zwei Dinge für möglich:

  • Du übergibst nil. Das klingt nach Deiner Schilderung absurd, mag auch
    so
    sein, ergibt diesen Fehler.
  • Irgendwelche Seiteneffekte treten auf. Hier wäre es interessant zu
    wissen,
    wass passiert, wenn Du Deine Datumskonstanten auf nach dem 1.1.1970
    legst.

Hi Jan,

danke für die Infos u. Anregungen. Ich werde jetzt erst mal Ruby
aktualisieren und dann ein kleines Testprojekt umsetzen.

Mal sehen…

Rails 2.0 u. Ruby 1.8.6 patchlevel 111
=> jetzt klappts