Ruby on rails Rails 4,子域路由

Ruby on rails Rails 4,子域路由,ruby-on-rails,web-services,api,subdomain,Ruby On Rails,Web Services,Api,Subdomain,试图通过名为“API”的API子域在rails中实现web服务。 在我的hosts文件中,我添加了一行:127.0.0.1api.localhost 在我的routes.rb中,我通过以下方式设置了子域,在子域中,我只需要索引操作和少量手动添加的restful路由: namespace :api, path: '', :constraints => {:subdomain => "api"} do resources :posts, only: :index do col

试图通过名为“API”的API子域在rails中实现web服务。
在我的
hosts
文件中,我添加了一行:
127.0.0.1api.localhost

在我的
routes.rb
中,我通过以下方式设置了子域,在子域中,我只需要索引操作和少量手动添加的restful路由:

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
还生成了具有以下内容的响应控制器:
rails g controller api/posts

测试示例:

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

据我所知,链接应该可以工作,但我得到了路由错误:
没有路由匹配[get]“/posts”(与/posts.json相同)

尝试
http://api.lvh.me:3000
适用于Rails 3+

发件人:

如果我们去的话,我们会看到我们公司的主页 应用程序,因为lvh.me解析为IP地址127.0.0.1。这个 不同之处在于,我们现在可以在URL前面添加任何我们喜欢的子域 它仍然指向同一个应用程序

编辑:我很想在评论中知道为什么否决这个答案的人会这么做。这种方法对我仍然有效


编辑II:更新了从ASCII转换到Rails转换的链接,并添加了关于Rails 3+

的注释,因此我将发布我对该主题的研究

默认情况下,Rails的TLD长度设置为1。因此,它将无法确定
api.localhost
中的子域,从而导致路由错误

您有几种解决方案:
-设置一个指向127.0.0.1、tld长度为1的正确域(例如dev mywebsite.com)
-使用lvh.me
-在development.rb环境文件中设置
config.action\u dispatch.tld\u length=0

希望这能帮助其他有同样需要的人

编辑:
实际上,使用
localhost
并不是一个好主意,所以在开发中设置一个api作为域。我发现它不适用于跨子域的cookies。看来,我昨天遇到了这个问题

只需尝试将“.com”添加到您的子域:
api.localhost.com

在我的应用程序中,它也起了作用:
api.myapplication-dev.com。

主要原因是没有.localhost域,所以将.com放到您的主机:)


希望它像为我工作一样为您工作

您可以通过以下步骤实现这一点:

1–作为终端上的管理员用户登录:
sudo su–

2–编辑/etc/hosts文件
nano/etc/hosts

上述命令将在终端中为您打开/etc/hosts文件。你会在那里找到几行,重要的一行是:

127.0.0.1本地主机

这一行基本上将localhost映射到IP 127.0.0.1,在下面添加新行:

127.0.0.1 admin.localhost

这说明新的DNSadmin.localhost也应该映射到IP 127.0.0.1,按CTRL+x进行编辑 它将要求您在存在之前保存。按Y键保存更改

3-重新启动rails服务器。 现在,您可以通过以下两个URL访问本地主机
http://localhost:3000/
http://admin.localhost:3000

能否尝试将127.0.0.1 api.localhost行更改为127.0.0.1 api.localhost.local?另一种方法是:
api.local.host
:)链接已断开。ascicast.com是一个等待页面。还应该注意,这是针对Rails 3的
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"}