我开始研究Ruby-on-Rails是否会以某种方式帮助解决我的问题?
简而言之,我有一个遗留应用程序,它正在读写一组图像。此应用程序还使用sqlite数据库来帮助在需要时引用正确的图像文件。
我想要做的是让iPhone和/或iPad应用程序浏览图像,但也能够看到更新和其他图像,而无需点击刷新按钮;或使用定期计时器说。
这让我调查Ruby-on-Rails作为解决方案?
我制作了下图来思考我是否走在正确的道路上:
到目前为止,我显然拥有(遗留)就地linux应用程序,它可以生成图像并更新数据库。我还在linux应用程序中嵌入了一个bonjour服务,以允许iPhone应用程序连接并最新浏览sqlite数据库内的缩略图。棘手的部分是我已经意识到当远程更改数据库时,需要踢iPhone应用程序以更新其图像。
实际上我认为使用ruby-on-rails应用程序可以提供RESTful服务来访问全尺寸(加上缩略图)图像,允许从sqlite数据库中删除缩略图 - 这可能是数据库可能有10000+条目,所以不希望数据库不必要地增长。
任何提示或资源都会很棒。
感谢。
更新:我再次考虑了我的问题的措辞。我想我是想弄清楚我是否可以得到像 Rails 这样的东西来监控数据库的变化而不用某种方式进行轮询。
答案 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
解析最近更新的时间,并将其与上次刷新日期进行比较。