Ruby on Rails解决方案是异步通知iPhone应用程序更新吗?

时间:2010-09-16 11:14:21

标签: iphone ruby-on-rails linux

我开始研究Ruby-on-Rails是否会以某种方式帮助解决我的问题?

简而言之,我有一个遗留应用程序,它正在读写一组图像。此应用程序还使用sqlite数据库来帮助在需要时引用正确的图像文件。

我想要做的是让iPhone和/或iPad应用程序浏览图像,但也能够看到更新和其他图像,而无需点击刷新按钮;或使用定期计时器说。

这让我调查Ruby-on-Rails作为解决方案?

我制作了下图来思考我是否走在正确的道路上: isrubyonrailstheanswer 到目前为止,我显然拥有(遗留)就地linux应用程序,它可以生成图像并更新数据库。我还在linux应用程序中嵌入了一个bonjour服务,以允许iPhone应用程序连接并最新浏览sqlite数据库内的缩略图。棘手的部分是我已经意识到当远程更改数据库时,需要踢iPhone应用程序以更新其图像。

实际上我认为使用ruby-on-rails应用程序可以提供RESTful服务来访问全尺寸(加上缩略图)图像,允许从sqlite数据库中删除缩略图 - 这可能是数据库可能有10000+条目,所以不希望数据库不必要地增长。

任何提示或资源都会很棒。

感谢。

更新:我再次考虑了我的问题的措辞。我想我是想弄清楚我是否可以得到像 Rails 这样的东西来监控数据库的变化而不用某种方式进行轮询。

2 个答案:

答案 0 :(得分:1)

一个可能的答案是使用Apple的推送通知服务,它可以在您的应用程序之外作为奖励。

这实际上取决于您希望在应用程序中提供的内容。您可以只将您的应用程序的请求安排到您的服务器(可能是一个Ruby应用程序),因此您可以轮询更新。这可能是最简单的解决方案。

答案 1 :(得分:1)

我能想到的最简单的解决方案是对RESTful服务执行操作,从数据库中提取最近修改的日期。定期从iPhone应用程序中查询,然后刷新列表。

例如,如果您为图像创建脚手架:

rails generate scaffold Image name:string filename:string # fill in the other attributes you need

注意:您必须将旧版数据库同步到此Rails表

然后使用“updated_at”属性自动创建每个图像对象。

class ImagesController < ApplicationController
  # GET /images
  # GET /images.xml
  def index
    @images = Image.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @images }
    end
  end

  # GET /images/1
  # GET /images/1.xml
  def show
    @image = Image.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @image }
    end
  end

  def newest
    @image = Image.find(:last, :order => :updated_at)
    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @image }
    end
  end

  # more methods down here
end

并且您必须将以下匹配行添加到routes.rb

YourAppName::Application.routes.draw do
  match 'images/newest' => 'images#newest'
  resources :images
end

现在,您可以通过iPhone应用程序使用此URL提取描述最新图像的XML文件

http://localhost:3000/images/newest.xml

解析最近更新的时间,并将其与上次刷新日期进行比较。