Hi Jan,

das Problem ist im Grunde genommen ganz einfach: Das ist ein Bug in FlexImage. Ob das jetzt für dich gut ist, weil du weißt, dass der Fehler nicht bei dir liegt, oder schlecht, weil ich nicht weiß, ob die das inzwischen schon behoben haben und du dementsprechend
auf ein anderes Plugin umsteigen müsstest…

Dein Linuxserver läuft in Production-, dein Enwicklungsrechner in Dev.modus , oder?

Du gibst den Pfad (file_store) in der Modelklasse als Klassenvariable (self.) an. Die ist dann natürlich für alle Instanzen/Kindklassen gleich, auch wenn die schon def. wurden, d.h. beim ersten Aufruf wird sie auf "/images/customers/" (ShipmentImage wird geladen), dann auf "/images/companies" gesetzt (CompanyImageklasse wird geladen). Im Produktionsmodus werden dann die Klassen nicht nochmal neu geladen, damit ist der Pfad auch für die Shipmentbilder auf companies gesetzt. Wenn du das auf deinen Rechner im Developementmodus machst, dann werden die Klassen
bei jedem Aufruf neu geladen und es klappt.

Das ist ein Designfehler von FlexImage, Alex arbeitet zwar dran das zu fixen, aber ich weiß jetzt nicht, ob das schon geklappt hat.
Blätter doch einfach mal den Blog durch. http://beautifulpixel.com/

Rails stellt für so Probleme übrigens nette neue cattr_* Methoden bereit.

Ich hoffe, das hilft dir weiter.

Gruß,
Tom




On Jul 30, 2007, at 3:26 PM, Jan Roesner wrote:

Hallo Leute,

ich habe auf meinem Linux Server ein extrem kurioses Problem mit FlexImage, welches komischerweise auf meinem Mac nicht auftritt. Auf beiden Rechnern ist exakt die gleiche ImageMagick, RMagick, FlexImage und lighttpd Version vorhanden, alle gleich konfiguriert.

Folgendes habe ich in meiner App. Zwei Models, die jeweils über Images verfügen sollen.

class ShipmentImage < FlexImage::Model
  self.file_store = 'public/images/customers'
  pre_process_image :size => '250x250'
end

class CompanyImage < FlexImage::Model
  self.file_store = 'public/images/companies'
  pre_process_image :size => '130x130'
end

Beide haben also Ihr eigenes Verzeichnis für Images. Der Upload in diese separaten Verzeichnisse funktioniert auch einwandfrei. Die Controller dazu:

class ShipmentImageController < ApplicationController
  flex_image :action => 'show',
             :class => ShipmentImage,
             :overlay => {
             :file      => 'images/watermark.png',
             :alignment => :bottom_right,
             :offset    => 10
             }
  flex_image :action => 'thumb',
             :class => ShipmentImage,
             :size => '50x50'
end

class CompanyImageController < ApplicationController
  flex_image :action => 'show',
             :class => CompanyImage
  flex_image :action => 'thumb',
             :class => CompanyImage,
             :size => '50x50'
end

Auch kein Hexenwerk bis hierher. Jetzt das eigenartige: Ich rufe ein ShipmentImage im Browser auf:

http://myhost/shipment_image/show/11.png

Processing ShipmentImageController#show (for 1.2.3.4 at 2007-07-30 15:11:14) [GET]
  Session ID: 34b0c06c9e813e35fe8cee13c710b87f
Parameters: {"action"=>"show", "id"=>"11.png", "controller"=>"shipment_image"}
::: Checking session expiry
::: Session has not expired. Reinitialising.
::: Initializing session expiry. Expires at Montag, 30 Juli 2007 15:21 CEST
Sending data
Completed in 0.16251 (6 reqs/sec) | Rendering: 0.00007 (0%) | DB: 0.00047 (0%) | 200 OK [http://myhost/shipment_image/show/11.png]

Soweit ok, jetzt rufe ich ein CompanyImage auf:

http://myhost/company_image/show/1.png

Processing CompanyImageController#show (for 1.2.3.4 at 2007-07-30 15:11:24) [GET]
  Session ID: 34b0c06c9e813e35fe8cee13c710b87f
Parameters: {"action"=>"show", "id"=>"1.png", "controller"=>"company_image"}
::: Checking session expiry
::: Session has not expired. Reinitialising.
::: Initializing session expiry. Expires at Montag, 30 Juli 2007 15:21 CEST
Sending data
Completed in 0.11139 (8 reqs/sec) | Rendering: 0.00007 (0%) | DB: 0.00118 (1%) | 200 OK [http://myhost/company_image/show/1.png]

Soweit auch ok, jetzt rufe ich aber nochmal das erste ShipmentImage auf :

http://myhost/shipment_image/show/11.png

Processing ShipmentImageController#show (for 1.2.3.4 at 2007-07-30 15:11:34) [GET]
  Session ID: 34b0c06c9e813e35fe8cee13c710b87f
Parameters: {"action"=>"show", "id"=>"11.png", "controller"=>"shipment_image"}
::: Checking session expiry
::: Session has not expired. Reinitialising.
::: Initializing session expiry. Expires at Montag, 30 Juli 2007 15:21 CEST


Magick::ImageMagickError (unable to open image `/srv/shipbids/ public/../config/../public/images/companies/11.jpg': No such file or directory):
    /vendor/plugins/flex_image/lib/flex_image/model.rb:715:in `read'
/vendor/plugins/flex_image/lib/flex_image/model.rb:715:in `rmagick_image' /vendor/plugins/flex_image/lib/flex_image/model.rb:702:in `save_image' /vendor/plugins/flex_image/lib/flex_image/model.rb:270:in `process!'
    (eval):8:in `show'

.... usw.

Statt hier den relativen Pfad zu den ShipmentImages (images/ customers) zu nutzen, versucht er aus irgendwelchen Gründen einen statischen Pfad (auf images/companies) zu bauen, benutzt dabei aber den Pfad für meine CompanyImages, was ich überhaupt nicht nachvollziehen kann. Ich dachte jetzt an ein Cacheproblem, habe mal mit WebRick getestet, gleiches Resultat, habe dann ImageMagick, RMagick und lighttpd aus exakt den gleichen Sourcen auf der Linuxkiste gebaut, wie bei mir auf dem Mac, keine Änderung. Ich weiss nicht, wo ich jetzt noch nach Fehlern suchen soll.

Kennt jemand von Euch das Problem? Hat jemand eine Idee, wo ich noch ansetzen könnte?

Beste Grüsse

Jan Roesner
[EMAIL PROTECTED]



_______________________________________________
rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug

_______________________________________________
rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug

Antwort per Email an