2012-01-31 13 views
2

私は1つを実行したいsinatraへのアプリケーションは2つのポートで聞く 80と4567?sinatraは複数のポートを受信できますか?

は、Windows XP

  • の可能

    • だけ
    • は私シナトラアプリケーションのインスタンスを1つだけ実行しているルビーを使用していることですか?私の知る限りでは、ありません、それはありません
  • +0

    好奇心の怪しさから、これはあなたのユースケースですか? – Phrogz

    +0

    標準の4567ポートを使用しながらアプリケーション全体を開発しました。これは単なるツールではありましたが、今は他の人にもリリースしますので、標準ポート80を使う方が良いと思っていました。そして、両方のポートで動作させることができればいいと思いました。私は80のためだけに行くように見えます。 – Radek

    答えて

    3

    。ポートフォワーディングと呼ばれています。アプリケーションをポート80で実行し、ポート4567を80に転送すると、両方のポートを持つことができます。または、あなたのローカルアプリケーションを実行し、保護されたポート80を4567ポートに転送する場合は、それ以外の方法で行います。これは、ほとんどのホスティングサービスがクライアントのアプリケーションをどのように実行するかを示しています。

    +0

    はい、iptablesは* nixesでそれを行います。それは難しく見えますが、難しくありませんが、まだ... – three

    +0

    私はWindowsでそうすることはできますか? 'ruby solution'だけを使うことができますか? – Radek

    +1

    @Radek - Googleが[このユーティリティ]を見つけました(http://www.quantumg.net/portforward.php)。私はWindows上でWindowsの設定を制御するためのRubyのメソッドは見当たらない(ただし、Rubyのバッククックを使用してコマンドラインソリューションを見つけることができます)。 – Phrogz

    2

    あなたが同じデータベースを共有して、アプリケーションの2つの異なるコピーを起動することができます:

    ruby myapp.rb -p 80 & 
    ruby myapp.rb -p 4567 & 
    

    これらの2つの別々のRubyで実行しますプロセスに問題が発生する場合と発生しない場合があります(プロセスに情報を格納しているかどうかによって異なります)。ただし、デフォルトのクッキーベースのセッションでもプロセス間で動作します:アクションで

    require 'sinatra' 
    
    enable :sessions 
    get '/in/:msg' do 
        session[:msg] = params[:msg] 
        "I stored #{session[:msg]}" 
    end 
    
    get '/out' do 
        "Here you go: #{session[:msg]}" 
    end 
    

    を:あなたができるもちろん

    phrogz$ ruby sessions.rb -p 3000 & 
    [1] 58698 
    
    phrogz$ ruby sessions.rb -p 3001 & 
    [1] 58699 
    
    phrogz$ curl -b cookies.txt -c cookies.txt http://localhost:3000/in/foo 
    I stored foo 
    
    phrogz$ curl -b cookies.txt -c cookies.txt http://localhost:3000/out 
    Here you go: foo 
    
    phrogz$ curl -b cookies.txt -c cookies.txt http://localhost:3001/out 
    Here you go: foo 
    
    +0

    私はdbを使用しません。 rbコードのみ。同じアプリケーションの2つのインスタンス間で変数を共有できますか?何かが一度に一度だけ実行されていることを確認したいのであれば、何とかそれが実行されていることを知る必要があります。 – Radek

    +0

    @Radek私はあなたの要件を完全に理解していません。 – Phrogz

    +0

    私はsinatraアプリケーションを使用して、テストの自動化スクリプトを実行します。このスクリプトは完了までに時間がかかります。私はsinatraのインスタンスがテストを開始した場合、別のテストスクリプトが再び起動されないことを確認する必要があります。このような情報をsinatraの外に保存しなくても使用できますか?ちょうど記憶に? – Radek