Forum: Ruby on Rails File upload into Mysql (using lighttpd) problem

Posted by Michael Sica (Ataraxis Software) (Guest)
on 2006-08-08 06:39
Hello All,

I've run into a snag. (I apologize in advance. I'm not very good at 
system administration.)

I'm building an app that allows users to upload files. Up until now I 
have been storing the files on the file system, but tonight I decided to 
change the app so the files are stored in the database as a longblob.

I thought everything was working great, until I tried uploading a file 
that is almost 1 meg in size. I've got a bunch of test images I use, and 
the smaller ones (200k and below) work fine. But when I try the 700k & 
900k files it just doesn't work. (It did work when I was storing them on 
the file system.)

I've done a bit of googling for an answer, but I haven't found anything 
that looks like a solution.

I'm using mysql 4.1. All my tables are InnoDB. I'm running lighttpd for 
the web server.

There is something on this page about FastCGI not liking file sizes of a 
certain kind. (Very bottom)
http://wiki.rubyonrails.org/rails/pages/HowtoUploadFiles

It says to change the param, IPCCommTimeout, to a higher amount. But 
he's using Apache, and I'm using lighttpd. (I don't see the equivalent 
setting in the lighttpd.conf file. 
http://www.lighttpd.net/documentation/fastcgi.html#options)

I tried changing the, "idle-timeout", to a really high number, but that 
didn't work.

BUT, like I said before, I wasn't having problems before I switch to the 
DB style of storage.

So I looked into DB-related issues. The closest thing I found was a 
recommendation to increase the "max_allowed_packet" param in mysql. I 
increased it to 52427776, but that didn't fix the problem either.

I really don't know what else to look into.

I've included what I'm seeing on the console when the problem occurs at 
the bottom of this post.

Does anyone have any suggestions?

Thanks!
-michael.

------

(omitted a ton of binary text)

bca3ca698c5345898e9c5444f8e2de5657a265206b528506a2a0575311c6831e55fb7fd8eb629e051b857f3a7d9fecf4c39f3873fc1cec05dc71e47f8855d9291f372e134f817eef4c954a94fa845c37996c56e45b91eec95ff00891a380a68f5f3aff2a7f83ad76ffc47d7f3d7fca9d0fbe2df1fdcbbfdeed0f0783f4ff0b87f89fdbf8ef6d7f79f69fe778be9d1ab9b5f8f6fff008d53e75fe5ebc38fcbf9f54a26ae2694f415afede1f3fe5d7fffd9', 
'f', '350zchromesilver.jpg')):
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/connection_adapters/abstract_adapter.rb:120:in 
`log'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/connection_adapters/mysql_adapter.rb:185:in 
`execute'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/connection_adapters/mysql_adapter.rb:195:in 
`insert'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/base.rb:1739:in 
`create_without_callbacks'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/callbacks.rb:261:in 
`create_without_timestamps'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/timestamp.rb:30:in 
`create'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/base.rb:1718:in 
`create_or_update_without_callbacks'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/callbacks.rb:249:in 
`create_or_update'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/base.rb:1392:in 
`save_without_validation'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/validations.rb:724:in 
`save_without_transactions'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/transactions.rb:126:in 
`save'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/connection_adapters/abstract/database_statements.rb:51:in 
`transaction'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/transactions.rb:91:in 
`transaction'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/transactions.rb:118:in 
`transaction'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/transactions.rb:126:in 
`save'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/associations/has_many_association.rb:143:in 
`insert_record'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/callbacks.rb:343:in 
`callback'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/associations/association_proxy.rb:110:in 
`method_missing'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/associations/has_many_association.rb:90:in 
`method_missing'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/callbacks.rb:343:in 
`callback'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/callbacks.rb:335:in 
`callback'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/callbacks.rb:330:in 
`callback'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/callbacks.rb:262:in 
`create_without_timestamps'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/timestamp.rb:30:in 
`create'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/base.rb:1718:in 
`create_or_update_without_callbacks'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/callbacks.rb:249:in 
`create_or_update'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/base.rb:1392:in 
`save_without_validation'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/validations.rb:724:in 
`save_without_transactions'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/transactions.rb:126:in 
`save'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/connection_adapters/abstract/database_statements.rb:51:in 
`transaction'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/transactions.rb:91:in 
`transaction'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/transactions.rb:118:in 
`transaction'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/transactions.rb:126:in 
`save'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/associations/has_many_association.rb:143:in 
`insert_record'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/associations/association_collection.rb:26:in 
`<<'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/associations/association_collection.rb:23:in 
`<<'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/connection_adapters/abstract/database_statements.rb:51:in 
`transaction'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/transactions.rb:91:in 
`transaction'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/transactions.rb:118:in 
`transaction'
    /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.14.1/lib/active_record/associations/association_collection.rb:22:in 
`<<'
    /app/controllers/piece_controller.rb:62:in `new_piece'
    /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/base.rb:910:in 
`perform_action_without_filters'
    /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/filters.rb:368:in 
`perform_action_without_benchmark'
    /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/benchmarking.rb:69:in 
`perform_action_without_rescue'
    /usr/local/lib/ruby/1.8/benchmark.rb:293:in `measure'
    /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/benchmarking.rb:69:in 
`perform_action_without_rescue'
    /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/rescue.rb:82:in 
`perform_action'
    /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/base.rb:381:in 
`process_without_filters'
    /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/filters.rb:377:in 
`process_without_session_management_support'
    /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.12.1/lib/action_controller/session_management.rb:117:in 
`process'
    /usr/local/lib/ruby/gems/1.8/gems/rails-1.1.1/lib/dispatcher.rb:38:in 
`dispatch'
    /usr/local/lib/ruby/gems/1.8/gems/rails-1.1.1/lib/fcgi_handler.rb:150:in 
`process_request'
    /usr/local/lib/ruby/gems/1.8/gems/rails-1.1.1/lib/fcgi_handler.rb:54:in 
`process!'
    /usr/local/lib/ruby/site_ruby/1.8/fcgi.rb:600:in `each_cgi'
    /usr/local/lib/ruby/site_ruby/1.8/fcgi.rb:597:in `each_cgi'
    /usr/local/lib/ruby/gems/1.8/gems/rails-1.1.1/lib/fcgi_handler.rb:53:in 
`process!'
    /usr/local/lib/ruby/gems/1.8/gems/rails-1.1.1/lib/fcgi_handler.rb:23:in 
`process!'
    public/dispatch.fcgi:24




Posted by Michael Sica (Ataraxis Software) (Guest)
on 2006-08-10 03:31
Thank goodness for source control. I'm just going back to my file-based 
approach. No sense in wasting time trying to figure this out.
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.