Re: [Mongrel] Win32 service - Errno::EINVAL (Invalid argument)whenuploading image file
On 4/28/07, Herryanto Siatono <[EMAIL PROTECTED]> wrote: > Thanks Luis, btw, I found some hints, it failed when the 'puts' statement > was called. > > That's why the uploading of image failed, while other types are fine, when I > upload an image, I need to crop the image which instead call > Base64.b64encode, in which "puts" was called to display the output on > console. > > So I did a simple test, I added puts before the execution of anything, and > it failed exactly at that line: > > def with_image(file_data = nil, &block) > puts "testing" > > img = Magick::Image::read_inline(Base64.b64encode(file_data || > self.data)).first > block.call(img) > img = nil > GC.start > end > Let me guess, the line :115 is actually... PUTS! Err, a big problem with this. Let me explain. A service, also known on *nix fields as "daemon", by default, lacks a "console" attached to it. That means STDIN, STDOUT and STDERR. These default "pipes" are used by sentences like puts, which "write" data to the console. Since you're inside a service... you don't have one! :-P Also, lot of folks will correct me on this: adding puts in your code for debugging purposes is a bad practice. Instead you should use logger.debug/info/warn/error to log the event inside the development/production log files. So, replace puts "testing" with logger.debug "testing" and that should work fine since is the only place you're using it ;-) Anyway, next version of service add a workaround for this "bug by design" of services. > > Now we are getting close, why puts failed when running as windows service? > Note that it works fine when I'm running with "mongrel_rails start" > > And here are my answers to your questions. Thanks! > > [...] Everything looks good, actually :-D Your feedback allowed you to pinpoint where the problem lies, so you almost solved the issue by yourself, so thank you instead! ;-) Regards and good weekend. -- Luis Lavena Multimedia systems - Leaders are made, they are not born. They are made by hard effort, which is the price which all of us must pay to achieve any goal that is worthwhile. Vince Lombardi ___ Mongrel-users mailing list Mongrel-users@rubyforge.org http://rubyforge.org/mailman/listinfo/mongrel-users
Re: [Mongrel] Win32 service - Errno::EINVAL (Invalid argument)whenuploading image file
Thanks Luis, btw, I found some hints, it failed when the 'puts' statement was called. That's why the uploading of image failed, while other types are fine, when I upload an image, I need to crop the image which instead call Base64.b64encode, in which "puts" was called to display the output on console. So I did a simple test, I added puts before the execution of anything, and it failed exactly at that line: def with_image(file_data = nil, &block) puts "testing" img = Magick::Image::read_inline(Base64.b64encode(file_data || self.data)).first block.call(img) img = nil GC.start end Error message thrown: #{RAILS_ROOT}/app/models/asset.rb:115:in `write' #{RAILS_ROOT}/app/models/asset.rb:115:in `puts' #{RAILS_ROOT}/app/models/asset.rb:115:in `with_image' #{RAILS_ROOT}/app/models/asset.rb:100:in `crop_image_size' Now we are getting close, why puts failed when running as windows service? Note that it works fine when I'm running with "mongrel_rails start" And here are my answers to your questions. Thanks! 1) What plugin are you using to manage upload attachments? (since I see you have a crop_image_size and with_image inside Asset model I'm using rmagick-win32 with ImageMagick installed. Rmagick 1.13.0 and ImageMagick 6.2.9-3 Q8. I didn't use any plugin, I developed the file upload handling myself, with some tricks learned from file_column and acts_as_attachment. 2) From the service command line, you have ruby installed in E:\Ruby. Is this directory in your path? (Open a new console, type PATH and hit enter, tell me if E:\Ruby is in there). "E:\ruby\bin" is there. - PATH=E:\Program Files\Windows Resource Kits\Tools\;e:\program files\imagemagick-6.2.9-q8;e:\ruby\bin;C:\Perl\bin\;C:\WINDOWS\system32;C:\W INDOWS;C:\WINDOWS\Syst em32\Wbem;C:\PROGRA~1\ULTRAE~1;C:\Program Files\Common Files\Adaptec Shared\System;C:\Program Files\Microsoft SQL Server\80\Tools\BINN;E:\PROGRA~1\ATT\Graphviz\ bin;e:\Program Files\WinSCP3\;e:\Program Files\Subversion\bin;C:\Program Files\QuickTime\QTSystem\;E:\Program Files\Support Tools\;D:\jdk\jdk1.5.0_04\bin;C:\Program Files\CVSNT\;d:\java\apache\apache-ant-1.6.2\bin;D:\java\apache\Maven 1.0.2\bin\;e:\program files\xampp\mysql\bin;c:\php;c:\php-4.4.0;e:\program files\svn-win32-1.3.1\bin;D:\rubywork\bin;E:\Program Files\Windows Resource Kits\psexec 3) You also tested the service as "console", could you please indicate the location of the temp file under that situation? C:\Windows\Temp do not seems right for a process running with Administrator or any other account credentials. Sorry my mistake Luis running service as "console", throwing this message instead: {"project_id"=>"1", "commit"=>"Upload file", "attachment"=>{"0"=>{"private"=>"0", "category_id"=>"", "description"=>"", "file"=>#}}} While running it as normal windows service, the temp directory is "c:\windows\temp". 4) Since you mention RMagick, are ImageMagick binaries in the path too? Yep image magick is in the path. I can run 'convert' command. ___ Mongrel-users mailing list Mongrel-users@rubyforge.org http://rubyforge.org/mailman/listinfo/mongrel-users
Re: [Mongrel] Win32 service - Errno::EINVAL (Invalid argument) whenuploading image file
On 4/27/07, Herryanto Siatono <[EMAIL PROTECTED]> wrote: > Louis, > > Thanks for your prompt reply. Yeah, that's the error log that I got in the > log file. > > I'm running as Administrator. I've been cracking my head for days, hopefully > will be able to find a solution for this. > Henry, When you have the time, please provide the inside information needed to find the true problem. 1) What plugin are you using to manage upload attachments? (since I see you have a crop_image_size and with_image inside Asset model 2) From the service command line, you have ruby installed in E:\Ruby. Is this directory in your path? (Open a new console, type PATH and hit enter, tell me if E:\Ruby is in there). 3) You also tested the service as "console", could you please indicate the location of the temp file under that situation? C:\Windows\Temp do not seems right for a process running with Administrator or any other account credentials. 4) Since you mention RMagick, are ImageMagick binaries in the path too? Regards, -- Luis Lavena Multimedia systems - Leaders are made, they are not born. They are made by hard effort, which is the price which all of us must pay to achieve any goal that is worthwhile. Vince Lombardi ___ Mongrel-users mailing list Mongrel-users@rubyforge.org http://rubyforge.org/mailman/listinfo/mongrel-users
Re: [Mongrel] Win32 service - Errno::EINVAL (Invalid argument) whenuploading image file
Louis, Thanks for your prompt reply. Yeah, that's the error log that I got in the log file. I'm running as Administrator. I've been cracking my head for days, hopefully will be able to find a solution for this. Herry -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Luis Lavena Sent: 26 April 2007 14:21 To: mongrel-users@rubyforge.org Subject: Re: [Mongrel] Win32 service - Errno::EINVAL (Invalid argument) whenuploading image file On 4/26/07, Herryanto Siatono <[EMAIL PROTECTED]> wrote: > Hi guys, > > I'm facing an error trying to run my app as mongrel_service, hope those who > have faced similar issue can help to shed some lights. > > The app was fine when running from console, but when running it as a > service, it failed when I try to upload 'image file', it has no issue > uploading other types of files. > > Environment: > > mongrel (1.0.1, 0.3.13.3) > mongrel_service (0.3.1) > rmagick (1.13.0) > ruby (1.8.5) > rails (1.2.3) > Tested on Windows XP and Windows 2003 server > > Error Message: > -- > Errno::EINVAL (Invalid argument): > e:/ruby/lib/ruby/1.8/base64.rb:114:in `write' > e:/ruby/lib/ruby/1.8/base64.rb:114:in `print' > e:/ruby/lib/ruby/1.8/base64.rb:114:in `b64encode' > e:/ruby/lib/ruby/1.8/base64.rb:113:in `scan' > e:/ruby/lib/ruby/1.8/base64.rb:113:in `b64encode' > /app/models/asset.rb:110:in `with_image' > /app/models/asset.rb:100:in `crop_image_size' > /vendor/rails/activerecord/lib/active_record/callbacks.rb:337:in `send' > /vendor/rails/activerecord/lib/active_record/callbacks.rb:337:in > `callback' > /vendor/rails/activerecord/lib/active_record/callbacks.rb:334:in `each' > /vendor/rails/activerecord/lib/active_record/callbacks.rb:334:in > `callback' > /vendor/rails/activerecord/lib/active_record/callbacks.rb:242:in > `create_or_update' > /vendor/rails/activerecord/lib/active_record/base.rb:1617:in > `save_without_validation' > /vendor/rails/activerecord/lib/active_record/validations.rb:810:in > `save_without_transactions' > /vendor/rails/activerecord/lib/active_record/transactions.rb:105:in > `save' > > > > /vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/da > tabase_statements.rb:59:in `transaction' > /vendor/rails/activerecord/lib/active_record/query_cache.rb:66:in `send' > Parameters: > > {"project_id"=>"1", > "commit"=>"Upload file", > "attachment"=>{"0"=>{"private"=>"0", > "category_id"=>"", > "description"=>"", > "file"=>#}}} > What plugin are you using to manage attachments? Also, is Ruby bin directory (e:/ruby/bin) in your path? > Service command: > > "e:/ruby/bin/mongrel_service.exe" single -e production -p 4000 -a 0.0.0.0 -l > "log/mongrel.log" -P "log/mongrel.pid" -c "D:/rubywork/[appname]" -t 0 -r > "public" -n 1024 > > Not sure if it was access right issue as service runs as System account, but > I tried running the service in the console yet I'm getting the same error > message > You get the same temporary file location? current user should store temps into C:\Documents and Settings\[username]\Local Settings\Temp Trying to write to C:\Windows\Temp could raise a LUA bug (Limited User Account). Also, since you mention RMagick, are binaries (dlls) of ImageMagick in the path? > Service console command: > --- > > mongrel console single -e production -p 4000 -l -c "D:/rubywork/[appname]" > > > No error message shown on the console, log/mongrel.log file was not there as > well. > Blame me for that, current version lacks logging. We are cooking the replacement which solve that issue. After running mongrel_service console, the log/production.log file shows the same error you listed before, right? What are your privileges as user in the computers you're testing? Normal (Power User), restrictred (User) or administrator? -- Luis Lavena Multimedia systems - Leaders are made, they are not born. They are made by hard effort, which is the price which all of us must pay to achieve any goal that is worthwhile. Vince Lombardi ___ Mongrel-users mailing list Mongrel-users@rubyforge.org http://rubyforge.org/mailman/listinfo/mongrel-users ___ Mongrel-users mailing list Mongrel-users@rubyforge.org http://rubyforge.org/mailman/listinfo/mongrel-users