2012-02-08 12 views
4

これは通常のRuby/Railsアプリケーションの場合とは多少異なります。イベントマシンの上で実行されるアプリケーションを構築しています。 WEBrickから提供されるいくつかのHTMLファイルがありますが、アプリケーションの大部分は、イベント・マシン・アプリケーションへのWebソケット接続を使用して、クライアント側でjavascriptを実行します。ファイルのアップロードを受け入れてローカルに保存できる必要があります。これはどうすればできますか?イベントマシン:ファイルのアップロードを受け取る方法は?

更新:興味がある場合は、here is a link to the source codeです。

+0

HTTPで 'multipart/form-data'の仕様を見て、そのアプローチをコピーしてください。 – millimoose

+0

「HTTPファイルのアップロード」のためのグーグル。例えば。 http://www.vivtek.com/rfc1867.html – millimoose

+0

これは役立ちます:https://github.com/igrigorikここにhttp://www.faqs.org/rfcs/rfc1867.htmlより非公式に、/em-websocket 次のリンク(server.rb)のコードは役立つかもしれませんが、唯一の注意点はSinatraを使用していますが、WEBrickのために簡単に変更できます: –

答えて

1

まずシナトラとの単純なファイルのアップロードを構築する方法である:File upload with Sinatra

だから今薄いとWebサーバーを実行するために、あなたのコードでこれを行うことができます。

class MyWebApp < Sinatra::Base 
    # here goes the sinatra app code 
    post '/something' do 
    # ... 
    end 
end 

EM::run do 
    Thin::Server.start('0.0.0.0', 8000) do 
    map('/'){ run MyWebApp.new } 
    end 
end 

thinはeventmachineを内部的に使用しています。私はwebrickがスレッドを使用していると思いますが、正直言って本当にそれを調べたことはありません。

ruby​​プロセスの前で、ファイルのアップロードに少なくともapacheまたはnginxを使用する必要があります(WebSocketが機能しないと思います)。 必要ならば簡単なnginx設定を含めることができます(私のディスクxD上で見つけるだけです)。

編集:別の解決策は、あなたがここに例があり、Webサーバとしてゴリアテを使用することです:https://github.com/postrank-labs/goliath/blob/master/examples/async_upload.rb あなたはシナトラ+ nginxの/ Apacheにとどまるべきアップロードの進行状況を表示する必要がない場合。

0

ウェブソケット接続を経由してアップロードする必要があるため、標準のRailsコントローラを使用できない場合は、EventMachine.deferを使用して、新しいスレッドを生成し、リアクタをブロックせずにファイルアップロードを管理します。

+0

もう少し詳しいことを教えてください。 Railsを使用していないため、明らかにRailsコントローラを使用することはできません。しかし、私はEventMachineに「ファイルアップロードを管理する」ことをどのように指示しますか? – Andrew

+0

https://github.com/thirtysixthspan/waterundericeをご覧ください – Joshua

関連する問題