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