2017-02-12 20 views
0

Ruby on Railsを使用してログイントークン認証APIを構築しました。ローカルでうまく動作します。ローカルとherokuデータベースにユーザーが組み込まれています。API呼び出しはローカルで動作しますが、Herokuでは動作しません

curl -v -H "Content-Type:application/json" -X POST -d '{"session":{"password":"12345678","email":"[email protected]"}}' http://api.zapserver.dev/sessions/ 

サーバーから正しいJSON応答を取得できます。

しかし、私はこのようなものになるだろうHerokuのに同じ呼び出し、実行するとき:

curl -k -v -H "Content-Type:application/json" -X POST -d '{"session":{"password":"12345678","email":"[email protected]"}}' https://api.appname.herokuapp.com/sessions/ 

を私は404 Not Foundエラーを得ました。

私はrails db:migrateを行っていますが、私はまだ同じエラーがあります。

アイデア?私は、文字通りHerokuのログからは何も得なかった

EDIT

は、私がheroku logs --tailコマンドを使用し、何も起こりませんでした。

ここで私はカールからもらったエラーメッセージです:

* Trying 50.19.245.201... 
* TCP_NODELAY set 
* Connected to api.zapserver.heroku.com (50.19.245.201) port 443 (#0) 
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 
* Server certificate: *.herokuapp.com 
* Server certificate: DigiCert SHA2 High Assurance Server CA 
* Server certificate: DigiCert High Assurance EV Root CA 
> POST /sessions/ HTTP/1.1 
> Host: api.zapserver.heroku.com 
> User-Agent: curl/7.51.0 
> Accept: */* 
> Content-Type:application/json 
> Content-Length: 67 
> 
* upload completely sent off: 67 out of 67 bytes 
< HTTP/1.1 404 Not Found 
< Connection: keep-alive 
< Server: Cowboy 
< Date: Sun, 12 Feb 2017 14:30:09 GMT 
< Content-Length: 494 
< Content-Type: text/html; charset=utf-8 
< Cache-Control: no-cache, no-store 
< 
<!DOCTYPE html> 
    <html> 
     <head> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <meta charset="utf-8"> 
     <title>No such app</title> 
     <style media="screen"> 
      html,body,iframe { 
      margin: 0; 
      padding: 0; 
      } 
      html,body { 
      height: 100%; 
      overflow: hidden; 
      } 
      iframe { 
      width: 100%; 
      height: 100%; 
      border: 0; 
      } 
     </style> 
     </head> 
     <body> 
     <iframe src="//www.herokucdn.com/error-pages/no-such-app.html"></iframe> 
     </body> 
* Curl_http_done: called premature == 0 
* Connection #0 to host api.zapserver.heroku.com left intact 
+0

あなたのユーザーはまだherokuに存在していますか? –

+0

'rake db:migrate'ではなく、レールです。打ち間違え? –

+1

rails db:migrateはレールには問題ありません5 –

答えて

1

したがって、私がapi.example.comのようなものを使用したい場合、Herokuはあなたにドメインの支払いを望んでいるので、ルーティングを少し変更します私の古いroute.rb

namespace :api, defaults: { format: :json }, constraints: { subdomain: 'api' }, path: '/' do 

をに代わり、コードの

namespace :api, defaults: { format: :json }, path: '/api' do 

をそして今、私はこのようなカールを行う場合:.example.comとは、使用してroute.rbにxxx.com/apiします:

curl -k -v -H "Content-Type:application/json" -X POST -d '{"session":{"password":"12345678","email":"[email protected]"}}' https://example.com/api/sessions/ 

正しいJSONをサーバーから取得できます。

+0

あなたはそれをあなた自身で解決しました。 !すばらしいです –

0

404は、エラーは、ページが見つからないことを意味し、したがって、ルーティングエラー?あなたはより詳細なヒロクのログを投稿できますか? thx また、以下に述べるように。 rails db:migrateはheroku DBに影響しません。したがって、あなたはheroku run rake db:migrateと他のレーキcomandsを実行したいと思うでしょう

+0

私はこれもやっていますが、まだ何もしていません。また、curlコマンドを実行すると、英雄ログには何もありません。上記のエラーメッセージを追加しました – DevArenaCN

+0

これはRails 5アプリケーションであるため、 '' heroku run rails db:migrate'''を使用する必要があることを明確にしたかっただけです。 '' '' rails''と '' rake''の間の切り替えはこれ以上ありません。しかしこれは実際の404の問題とは関係ありません。 – Wes

1

ドメインルーティングの仕組みです。 example.comを所有している場合、このドメインで終わるアドレス(mail.example.com、www.example.comなど)へのリクエストはすべて、設定済みのDNSサーバーにルーティングされます。このサーバーは、DNSレコードの構成に基づいてアドレスをIPアドレスに変換します。

ドメインのルートは、この場合、herokuapp.comはHerokuが所有しています。そのため、アプリケーションを作成するときに、そのアプリケーションのDNSエントリを作成し、そのインスタンスの内部を指し示すことができます。 Herokuアプリケーションで実行されているアプリケーションコードが、内部ネットワーク構成へのAPIアクセスを何も与えずに追加のサブドメインを作成できるメカニズムはありません。したがって、本質的に、これは決して有効なアドレスではありません:https://api.appname.herokuapp.com

カスタムドメインを作成する場合は、あなたのドメインで終わる限りあなたが好きなアドレスを使用することはできますが、それらの名前あなたの新しいDNSホストでも。

だから私はそれが、より多くの料金を請求したいと思うHerokuとは関係がないと言います。それは単にDNSが動作する方法です。

関連する問題