【问题标题】:Connecting my Rails Web app database to my Rails API on Heroku将我的 Rails Web 应用程序数据库连接到 Heroku 上的 Rails API
【发布时间】:2015-10-15 20:49:18
【问题描述】:

我觉得我的问题已通过许多其他问题得到部分解答,但我无法将所有内容拼凑在一起。

基本上,我想构建一个相当简单的网络应用程序,但也能够相当轻松地为它构建一个移动应用程序。根据我的研究,最佳实践是构建一个 RESTful JSON API,然后将该 API 用于我的网络应用和移动应用。

我已经着手为我的 JSON API 开发了身份验证(使用:http://lucatironi.net/tutorial/2015/08/23/rails_api_authentication_warden/),并且我已经在 Heroku 上进行了验证。现在,对于我的 Web 应用程序,我正在使用 HTTParty 来使用该 API,并且我可以很好地恢复 JSON。但是,我不太确定如何处理数据库。我的第一个想法是,也许我需要通过它自己的 API 调用来访问 API 的数据库,但这似乎非常复杂(一想到必须为 User.find_by_<every attribute> 制作函数就让我害怕)。另一个想法是让我的网络应用程序使用 API 应用程序的数据库。但是,如果应用程序在 Heroku 上,我找不到任何有关如何执行此操作的信息。

所以基本上,我想知道最好的方法是什么。当然,每个带有 API 的大型或小型 Web 应用程序都使用一个标准。我真的很惊讶,这些天如此流行的东西很难找到好的答案。还是我对这一切都错了?任何指针将不胜感激。

【问题讨论】:

    标签: ruby-on-rails json api heroku


    【解决方案1】:

    用 Heroku 的说法,数据库是附加组件。

    使用heroku addons 获取您应用的插件列表。

    $ heroku addons -a appname
    
    Add-on                                    Plan       Price
    ────────────────────────────────────────  ─────────  ─────
    heroku-postgresql (relaxing-purely-8366)  hobby-dev  free 
     └─ as DATABASE    
    

    首先,您可能希望删除附加到前端应用程序的数据库:

    heroku addons:destroy fat-samurai-1234
    

    然后找到附加到您的 API 应用程序的数据库插件的名称,并将该插件附加到您的前端应用程序。

    heroku addons:attach shining-sushi-1234 -a sushi.
    

    至于哪种方法是合法的,这是一个值得讨论的问题。今天的许多应用程序都使用单页面架构,其中整个应用程序都在前端创建 - 在 javascript 中。因此,您的应用程序只使用您的 REST api。流行的框架是 Ember.js、Bootstrap 和 Angular。

    另一种方法是创建一个经典的服务器端应用程序 - 虽然可以创建一个使用 REST api 的应用程序,但会涉及大量开销,因此直接连接到数据库会更高效。

    【讨论】:

    • 我不确定,但是在第一次推送到 heroku 之前将数据库附加到您的前端应用程序可能会阻止 heroku 为应用程序生成数据库 - 这是一件好事。
    • 酷,不知道你可以在heroku中做到这一点。我会试一试。然而,这带来了开发如何运作的问题。我的前端开发数据库是否必须使用我的api的开发数据库?这可能吗,在本地运行我的 api 服务器以及我的前端。或者我可以以某种方式将我的开发环境连接到heroku?它自然是一个临时版本。可能意味着另一个问题,但如果你知道,那就太好了。
    • 取决于 - 我通常在开发数据库中有足够的示例数据,以便能够使用 CSS/HTML 进行合理的工作。使用远程数据库进行开发可能是可能的,但听起来像 PITA。如果您需要对真实数据进行开发,请使用 PG 备份并将数据镜像到本地数据库。
    • 暂存是一个完全不同的问题 - 但您可能应该使用另一个数据库并对两个暂存应用重复相同的步骤。
    • 谢谢,似乎一切正常。但是,您让我思考是否应该为我的前端拥有一个数据库(因为它实际上只是一个前端)。我主要认为我这样做了,因为我只从我的身份验证中收到了一封电子邮件和令牌,我只想使用User.find_by_email 来获取登录用户,但是当我构建我的 api 时,我将不得不复制过来每次都有新模型和新模式。看起来很烦人并且容易出错。如果我要走 Angular 路线,我无论如何都无法访问数据库。那么我什至应该为我的前端弄乱一个数据库吗?
    猜你喜欢
    • 2019-04-07
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多