【问题标题】:How can I access data from a Ruby on Rails application externally?如何从外部访问 Ruby on Rails 应用程序的数据?
【发布时间】:2010-12-28 15:05:54
【问题描述】:

我正在尝试从一个单独的 Ruby 脚本中处理我的 Rails 应用程序中的数据。

我读到this forum post,其中有人建议处理数据的最佳方式是将数据库封装在一个应用程序中,然后让该应用程序提供一个 API 来处理该数据。因为将数据库集成到几个不同的应用程序中显然很糟糕。

好吧,现在我想处理来自另一个脚本的 Rails 应用程序中的一些数据,但在同一个系统上。我怎样才能做到这一点?

我将来可能想远程处理来自我的 Rails 应用程序的数据,但也来自脚本。我假设这可能需要 JSON 或 SOAP,但在我去研究它之前我想知道。

【问题讨论】:

    标签: ruby-on-rails ruby json api encapsulation


    【解决方案1】:

    你看过 ActiveResource 吗?它专门设计用于通过 HTTP 将 Rails 模型中的数据公开给另一个 Rails 应用程序。

    【讨论】:

    • 谢谢。我查找了 Active Resource 并开始修改它,这正是我正在寻找的。结合基本的 HTTP 身份验证和 SSL,这非常适合我的需求,谢谢。
    【解决方案2】:

    由于 Ruby on Rails 遵循 REST,默认情况下,您的应用程序是它自己的 API。例如,假设您有以下控制器:

    class UsersController < ApplicationController
    
      def show
        @user = User.find(params[:id])
        respond_to do |format|
          format.html
          format.xml  { render :xml => @user}
          format.js
        end
      end
    
      def index
        @users = User.all
        respond_to do |format|
          format.html
          format.xml  { render :xml => @users}
          format.js
        end
      end
    end
    

    现在,当通过网络浏览器点击该控制器时,它将按照您的预期呈现您的视图。例如:

    GET /users/1   =>  /app/views/users/show.html.erb
    GET /users     =>  /app/views/users/index.html.erb
    

    但是,如果您将请求更改为:

    GET /users/1.xml
    GET /users.xml
    

    将返回 XML 数据而不是 HTML 视图。您现在可以通过使用某种REST Client 或简单地从任何命令行调用 cURL 从任何其他应用程序访问这些数据。

    您可以在 URL 的末尾附加任何扩展名,它会找到相应的 respond_to 部分。

    【讨论】:

    • 我在阅读了 Yehuda Katz 的回答后发现了这一点。您的答案与 Active Resource 相结合,正是我想要的。感谢您提供更多信息。
    【解决方案3】:

    访问数据也很简单,只需使用类似HTTParty 的方式向您的应用程序发出请求。 Look at the examples,他们很不错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      相关资源
      最近更新 更多