36850
[http://api.ローカルIPアドレス:3000
にアクセスできない](https://ja.stackoverflow.com/questions/36838/http-
api-%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%ABip%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B93000-%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84)
の続きです。

dnsmasqを入れて、`expand-hosts`を有効にしてアクセスはできるようになりました。

`/etc/hosts`の内容

```

    ローカルIPアドレス  api.example.com
    
```

しかし、`ActionController::RoutingError`が起こります。

RailsのAPIのルートは下記のように設定してあります。

```

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

正常に値が返ってくるときには、ログに（例えばローカルPCから`api.localhost:3000`としてアクセスした場合）下記が出力されています。

> Processing by コントローラ名#index as JSON  
>  Parameters: {"subdomain"=>"api"}

`api.example.com`でアクセスした場合、上記ログが出ていないのでうまくsubdomainの機構がうごいていないようです。
CC BY-SA 3.0
2017-08-01T07:53:15.100
36844
2017-08-01T10:42:32.707
2017-08-01T08:35:17.397
2238
9008
question
ruby-on-rails network
ローカルDNSを使ってアクセスするとActionController::RoutingError が起こる
Railsで`api.localhost`にアクセスするために

```

    config.action_dispatch.tld_length = 0
    
```

を設定していたのが原因でした。  
参考： [how to access subdomains locally with Rails
5](https://gist.github.com/indiesquidge/b836647f851179589765)

```

    config.action_dispatch.tld_length = 1
    
```

に修正して

`/usr/local/etc/dnsmasq.conf`に下記行を追加

```

    address=/api.hoge.com/ローカルIPアドレス
    
```

して

`$ sudo brew services restart dnsmasq`で再起動でいけました。

補足：

```

    address=/api.example.com/ローカルIPアドレス
    
```

ではそもそもiPhoneからRailsまで辿り着けませんでした。
CC BY-SA 3.0
2017-08-01T10:26:46.747
36850
2017-08-01T10:42:32.707
2017-08-01T10:42:32.707
9008
9008
36844
answer