2017-02-12 147 views
0

我使用Ruby on Rails构建了一些登录令牌认证Apis,它在本地运行良好,我有一个内置到本地和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的日志几乎一无所有,我用了一个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',不是rails。错字? –

+1

rails db:migrate for rails for rails 5 –

回答

1

所以问题是,如果你想使用类似api.example.com的东西,所以我改变路由有点从api Heroku希望你支付域名.example.com的使用在route.rb xxx.com/api:

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

,而不是代码在我的老route.rb

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

现在,如果我不喜欢这样的卷曲:

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和其他耙子指令

+0

我也这样做了,仍然没有。此外,当我执行curl命令时,heroku日志中没有任何内容。我在 – 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的工作方式。

相关问题