Re: [Mongrel] Win32 service - Errno::EINVAL (Invalid argument)whenuploading image file

2007-04-27 Thread Luis Lavena
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

2007-04-27 Thread Herryanto Siatono
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

2007-04-27 Thread Luis Lavena
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

2007-04-26 Thread Herryanto Siatono
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