[ANN] upr - Upload Progress for Rack (initial release)

Discussion in 'Ruby' started by Eric Wong, Nov 11, 2009.

  1. Eric Wong

    Eric Wong Guest

    upr is Rack middleware that allows browser-side upload progress
    monitoring. It is based-on the "mongrel_upload_progress" module, but
    allows any Moneta backing store in addition to DRb. There is also a
    packaged example for using an ActiveRecord model for Rails.

    * http://upr.bogomips.org/
    * git://git.bogomips.org/upr.git

    You can see upr it in action at http://upr-demo.bogomips.org/
    It will report the size and SHA1 of the file you've uploaded.
    Much of the demo was stolen from mongrel_upload_progress.

    == Web Server Compatibility

    While upr is completely Rack::Lint-compatible, upr is only compatible
    with Rack web servers that support a streaming "rack.input". Currently
    this is limited to {Rainbows!}[http://rainbows.rubyforge.org/] with a
    handful of concurrency models:

    * ThreadSpawn
    * ThreadPool
    * Revactor*

    For use with Revactor, the use of network-based Moneta stores or DRb is
    only advised if those stores are using Revactor-aware sockets.

    == JavaScript/HTML Compatibility

    The current developer does not react well with GUIs. Thus all (R)HTML
    and Prototype JavaScript code was stolen from mongrel_upload_progress.

    Contributions to add compatibility for more modern things like JQuery
    and HTML5 are very welcome.

    == Backend Compatibility

    We depend on {Moneta}[http://github.com/wycats/moneta], which allows the
    use of a multitude of key-value stores. We also provide a
    DRb+Moneta::Memory server to ease transitions from

    Additionally, there is an example for using Rails ActiveRecord as a
    backend storage mechanism. Cookie-based upload tracking may eventually
    be used, too (contributions very welcome).

    == Proxy Compatibility

    No proxy is required when used with Rainbows!

    The only incompatible HTTP proxy we know of is nginx. nginx will buffer
    large requests to the filesystem before sending them to the backend.
    nginx has its own 3rd-party module for
    {upload progress}[http://wiki.nginx.org/NginxHttpUploadProgressModule]
    and may be used instead of upr.

    Most other HTTP-aware and all TCP-only proxies should be compatible.
    Disabling Nagle's algorithm in both the Rack web server and proxy is
    advised for lower latency, especially with stunnel.

    == Unicorn Compatibility

    While {Unicorn}[http://unicorn.bogomips.org/] provides the streaming
    "rack.input" for Rainbows!, using Unicorn with upr is generally NOT
    recommended. Unicorn only supports fast clients and progress reporting
    is unnecessary unless clients are uploading files that are hundreds of
    megabyte in size or larger.

    == Getting Started

    gem install upr

    For Rails, look at the Rails application
    and RDoc. More documentation is on the way.

    Eric Wong
    Eric Wong, Nov 11, 2009
    1. Advertisements

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Follower
    May 7, 2004
  2. Kirill Simonov

    [ANN] LibYAML-0.0.1: The initial release

    Kirill Simonov, Aug 1, 2006, in forum: Python
    Kirill Simonov
    Aug 1, 2006
  3. Andrey Khavryuchenko
    Andrey Khavryuchenko
    Jan 15, 2007
  4. Jim Menard

    [ANN] midilib initial release

    Jim Menard, Jun 27, 2004, in forum: Ruby
    Jim Menard
    Jun 27, 2004
  5. Eric Wong
    Eric Wong
    Nov 14, 2009