gpt4 book ai didi

ruby-on-rails - Rails 4、子域路由

转载 作者:行者123 更新时间:2023-12-04 16:24:34 24 4
gpt4 key购买 nike

尝试通过名为“api”的 API 子域在 Rails 中实现 Web 服务。
在我的 hosts文件我添加了一行:127.0.0.1 api.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

还生成了对应的 Controller : 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

rake routes我有以下几点:
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"}

据我所知,链接到 http://api.localhost:3000/posts应该可以工作,但我收到路由错误: 没有路由匹配 [GET] "/posts" (与/posts.json 相同)

最佳答案

所以我发布了我对这个主题的研究

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

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

希望这可以帮助其他有相同需求的人

编辑:
使用 localhost 实际上不是一个好主意因此,将 api 设置为开发中的域。我发现它不适用于跨子域的 cookie

关于ruby-on-rails - Rails 4、子域路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20095318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com