Ruby on rails Rails 4,子域路由
试图通过名为“API”的API子域在rails中实现web服务。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
在我的
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"}