Rails 4, subdomain routing

520 views
Skip to first unread message

Srdjan Cengic

unread,
Nov 20, 2013, 7:04:45 AM11/20/13
to rubyonra...@googlegroups.com

Trying to implement web service in rails through API sub-domain called "api".
In my hosts file i added line: 127.0.0.1 api.localhost

In my routes.rb i set sub-domain, where i only need index action and few manually added restful routes, through following:

namespace :api, path: '', :constraints => {:subdomain => "api"} do
  resources :posts, only: :index do
    collection do
      get 'popular_by_day'
      get 'popular_by_week'
    end
  end
end

Also generated coresponding controller with: rails g controller api/posts

Test example:

class Api::PostsController < ApplicationController
  def index
    @posts = 1

    respond_to do |format|
        format.json  { render :json => @posts }
    end
  end

  def popular_by_day
  end

  def popular_by_week
  end
end

After rake routes i have following:
popular_by_day_api_posts GET /posts/popular_by_day(.:format) api/posts#popular_by_day {:subdomain=>"api"} popular_by_week_api_posts GET /posts/popular_by_week(.:format) api/posts#popular_by_week {:subdomain=>"api"} api_posts GET /posts(.:format) api/posts#index {:subdomain=>"api"}

Far as i know, link to http://api.localhost:3000/posts should work but i get routing error:
No route matches [GET] "/posts" (Same with /posts.json)

Tamara Temple

unread,
Nov 21, 2013, 4:12:00 AM11/21/13
to rubyonra...@googlegroups.com

On Nov 20, 2013, at 4:04 AM, Srdjan Cengic <ceng...@gmail.com> wrote:
>
> Far as i know, link to http://api.localhost:3000/posts should work but i get routing error:
> No route matches [GET] "/posts" (Same with /posts.json)

This isn’t how localhost works, at all.

If you need to set up a local subdomain for testing, you most likely will need to do things like modify your /etc/hosts table, set up local DNS resolvers, and the like. If you’re running on a mac, you can use pow, which makes all that dead-easy.


Rob Biedenharn

unread,
Nov 21, 2013, 8:37:48 AM11/21/13
to rubyonra...@googlegroups.com
But you could use:
http://api.127.0.0.1.xip.io:3000/posts

See http://xip.io/ for the details, but this will resolve to the IP address before the .xip.io and then api will be the subdomain.

-Rob

Tamara Temple

unread,
Nov 22, 2013, 1:03:07 PM11/22/13
to rubyonra...@googlegroups.com
+++Rob. I didn’t know about xip.io, thanks!


Reply all
Reply to author
Forward
0 new messages