web-dev-qa-db-ja.com

ローカルネットワーク上の別のコンピューターからwebrick / Railsにアクセスする

Rails localhost:3000で実行中のアプリケーションがあります。同じネットワーク上の別のコンピューターからアクセスしたい。悲しみ。コンピュータのIPに問題なくpingを実行できますが、ブラウザでip:3000を押しても機能しません。Rails s -b ipaddress同様に、そして運がない。

提案?

57
agmcleod

代わりにポート80でサーバーを実行してみてください。ファイアウォールがポート3000をブロックしている可能性があります。

2
VNO

サーバー側のファイアウォールが高いポートの着信接続に対して開かれていることを確認した後(これは通常trueであり、デフォルトのポートは3000なので、おそらく何もする必要はありません)、次のようにサーバーを起動する必要があります。

Rails server -b 0.0.0.0

ユニバーサルアドレスにバインドします。デフォルトではlocalhostにバインドします。

この方法を使用すると、ポート80にバインドする必要はありませんが、次のようにできます。

Rails server -b 0.0.0.0 -p 80

(rvmを使用している場合は、rvmsudoを使用する必要があるかもしれません)


この変更をより永続的にするには、config/boot.rbを編集して追加します:

require 'Rails/commands/server'
module Rails
  class Server
    def default_options
      super.merge(Host:  '0.0.0.0', Port: 3000)
    end
  end
end

次に、Rails sのみを使用する必要があります

出典: https://stackoverflow.com/a/29562898/1795429

158
OneHoopyFrood
Rails server -b 0.0.0.0 -p 8000

これは私のために働いた。ファイアウォールの問題はなく、スーパーユーザーのアクセス許可を与える必要もありません。

22
tomascharad
  1. はい、これは良い答えでした一般的に

    Rails server -b 0.0.0.0
    
  2. buntを使用する場合、おそらくfirewallでポートを開く必要があります。

    Sudo ufw allow 3000
    
  3. システムがVirtualBoxで実行されている場合、ネットワーク設定を確認する必要があります。

    ネットワークモードNATの場合、拡張オプションをクリックしてポート転送にする必要があります。 TCP protocoll、ホストポート3000(またはその他)、およびゲストポート3000のルールを追加します。

6
Beauty

Webrickが問題なく起動すると仮定すると、これは100%ファイアウォールの問題です。ホストが実行しているオペレーティングシステムや、ファイアウォールを制御する限り管理者権限があるかどうかなど、いくつかの仕様を指定する必要があります。

Linuxでiptablesファイアウォールサービスを実行している場合、ポート3000経由のトラフィックを受け入れるルールを追加する必要があります。次のようになります。

iptables -A INPUT -p tcp --dport 3000 -j ACCEPT

ただし、このコマンドは1回限りのソリューションになります。現在のiptablesルールスクリプトを拡張して、システムが起動またはログインするたびに永続的にする必要があります。

Windowsを実行している場合、XPまたはVista/7を実行しているかどうかに応じて、同様のことを行う必要があります。Vistaにいると仮定します。/7環境、およびこのガイドで提供されている手順に従う必要があります http://windows.Microsoft.com/en-US/windows7/Open-a-port-in-Windows-Firewall =。

4
Lester Peabody

1つの理由は、IPがRailsサーバーにバインドされていないことです。-bコマンドオプションを使用してipをバインドできます。

Usage: Rails server [mongrel, thin etc] [options]
-p, --port=port                  Runs Rails on the specified port.
                                 Default: 3000
-b, --binding=IP                 Binds Rails to the specified IP.
                                 Default: localhost
0
lsc

フォアマンを使用して、Procfileベースのアプリケーションを管理しています。

Procfileの-b 0.0.0.0コマンドにbundle exec Rails sを追加するとうまくいきました。

0
Mosab.Mohamed