Rails localhost:3000で実行中のアプリケーションがあります。同じネットワーク上の別のコンピューターからアクセスしたい。悲しみ。コンピュータのIPに問題なくpingを実行できますが、ブラウザでip:3000を押しても機能しません。Rails s -b ipaddress
同様に、そして運がない。
提案?
代わりにポート80でサーバーを実行してみてください。ファイアウォールがポート3000をブロックしている可能性があります。
サーバー側のファイアウォールが高いポートの着信接続に対して開かれていることを確認した後(これは通常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
のみを使用する必要があります
Rails server -b 0.0.0.0 -p 8000
これは私のために働いた。ファイアウォールの問題はなく、スーパーユーザーのアクセス許可を与える必要もありません。
はい、これは良い答えでした一般的に:
Rails server -b 0.0.0.0
buntを使用する場合、おそらくfirewallでポートを開く必要があります。
Sudo ufw allow 3000
システムがVirtualBoxで実行されている場合、ネットワーク設定を確認する必要があります。
ネットワークモードNAT
の場合、拡張オプションをクリックしてポート転送にする必要があります。 TCP protocoll、ホストポート3000(またはその他)、およびゲストポート3000のルールを追加します。
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 =。
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
フォアマンを使用して、Procfileベースのアプリケーションを管理しています。
Procfileの-b 0.0.0.0
コマンドにbundle exec Rails s
を追加するとうまくいきました。