2014-01-07 28 views
28

私はRailsアプリケーションをローカルに(Thin Server)実行していますが、ブラウザ(localhost:3000)からローカルに接続できますが、curlを使用しようとするとcURLはlocalhostに接続できませんでしたがブラウザは

curl -H 'id:1' -i 'http://localhost:3000/api/data' -v 

* Hostname was NOT found in DNS cache 
* Trying ::1... 
* Adding handle: conn: 0x7fd121808200 
* Adding handle: send: 0 
* Adding handle: recv: 0 
* Curl_addHandleToPipeline: length: 1 
* - Conn 0 (0x7fd121808200) send_pipe: 1, recv_pipe: 0 
* Connection failed 
* connect to ::1 port 3000 failed: Connection refused 
* Trying fe80::1... 
* Connection failed 
* connect to fe80::1 port 3000 failed: Connection refused 
* Failed to connect to localhost port 3000: Connection refused 
* Closing connection 0 
curl: (7) Failed to connect to localhost port 3000: Connection refused 

これはうまくいきましたが、私は最近Mavericksに更新しました。私はウェブからうまくカールすることもできます。あなたは/ etc/hostsファイルとレポートscutilに触れていないと仮定すると

+5

あなたは 'http://127.0.0.1:3000/api/data'を試すことができますか?何らかの理由でカールがipv6にまっすぐになるように見える... – fvu

+0

ありがとう、それは動作するようです。なぜこれが突然の場合、どんなアイデアですか? – jbeck

+0

私はMacの人ではありませんが、localhostのエントリが/ etc/hostsから消えている可能性があります(localhostという名前をループバックアドレス127.0.0.1にリンクするには '127.0.0.1 localhost'のような行が必要です)その行が存在する場合、resolv.confやhostsファイルやDNSの参照の有無、およびホストの順序など、macが使用するconfirgurationファイルに問題がある可能性があります。 – fvu

答えて

1

は正である:

$ scutil -r 127.0.0.1 
Reachable,Local Address 
$ scutil -r localhost 
Reachable,Local Address 

はその後、私の推測では、ファイアウォールが有効とカールからの接続を受け付けないということです。

私のマシンがスウェーデン語を使用するように設定されているので、私は言語の選択肢を推測しています)Preference - > Security - > Firewall alternative - > plus sign - >(

注:シェルで実際に使用しているカールを必ず追加してください。

$ type -a curl 
curl is /opt/local/bin/curl 
curl is /usr/bin/curl 
52

これは、カールが応答しないの/ etc/hosts内のIPv6エントリがあるかどう背面のIPv4にフォール失敗curl buga strange one)、です。

IPv4を使用するように強制するには、-4オプションを使用します。代わりに

curl localhost:3000 

+0

どうやって? @Steve Clay –

+11

あなたのコマンドに-4を加えてください: curl -4 -H 'id:1' -i 'http:// localhost:3000/api/data' -v – Kylar

+0

これはIPv6の問題のようです。私の/ etc/hostsファイルから "fe80 :: 1%lo0 \t localhost"をコメントアウトすると、curlは正常に動作します。私はヨセミテの2台のマックを持っていますが、そのうちの1台だけがこのエントリーを持っています。 1人のホストがlocalhostのIPv6エントリを持つ理由について誰でもコメントできますか? –

22

は、それが動作

curl 0.0.0.0:3000 

を試してみてください。
あなたはレールのサーバが起動するとき、それは、出力をチェックしない場合は、次の悪いことができ

=> Booting WEBrick 
=> Rails 3.2.13 application starting in development on http://0.0.0.0:3000 
=> Call with -d to detach 
=> Ctrl-C to shutdown server 
[2014-10-28 15:30:08] INFO WEBrick 1.3.1 
[2014-10-28 15:30:08] INFO ruby 2.0.0 (2014-02-24) [x86_64-darwin12.5.0] 
[2014-10-28 15:30:08] INFO WEBrick::HTTPServer#start: pid=4004 port=3000 

ではなくENV['HOST']

+4

'0.0.0.0:3000'では' localhost:3000'ではなく動作するのはなぜですか? – allegutta

0

の2行目の終わりに、この問題の別の原因をURLを使用プロキシアドレスを使用して構成されたシステム。

export http_proxy= 

を実行し、要因としてこれを排除するために、curlコマンドを再実行します。この問題は私のために修正されました。

2

プロキシを使用していますか?次に、以下を使用してプロキシを完全にバイパスします。

curl -x "" "http://127.0.0.1:3000" 
関連する問題