2010-09-16 3 views
0

Je commence à chercher si Ruby-on-Rails va aider à résoudre mon problème d'une manière ou d'une autre? En bref, j'ai une application héritée qui lit et écrit une collection d'images. Cette application utilise également une base de données sqlite pour aider à se référer aux fichiers d'image corrects lorsque cela est nécessaire. Ce que je voudrais faire est d'avoir une application iPhone et/ou iPad parcourir les images, mais aussi être capable de voir les mises à jour et les images supplémentaires sans frapper un bouton d'actualisation; ou en utilisant une minuterie périodique dites.La solution Ruby on Rails pour async informe-t-elle l'application iPhone des mises à jour?

Cela m'a amené à étudier Ruby-on-Rails comme une solution?

J'ai fait le schéma suivant de penser à si je suis sur la bonne voie: isrubyonrailstheanswer À ce jour, j'ai évidemment le (héritage) en place application linux, qui génère des images et met à jour la base de données. J'ai également intégré un service bonjour dans l'application linux pour permettre à une application iPhone de se connecter et de parcourir les miniatures qui sont à l'intérieur de la base de données sqlite. La partie délicate est que j'ai réalisé que l'application iPhone devait être kickée pour mettre à jour ses images lorsque la base de données est modifiée à distance. En fait, je pensais qu'avec une application ruby-on-rails, il pourrait fournir un service RESTful pour accéder à des images de taille maximale (plus, vignette) permettant de retirer les images miniatures de la base de données sqlite - il est probable que la base de données aurait 10000 + entrées, donc ne voulait pas que le db se développe inutilement.

Tout conseil ou ressource serait génial.

Merci.

Mise à jour: Je pensais de nouveau au libellé de ma question. Je suppose que j'essayais de comprendre si je pouvais obtenir quelque chose comme Rails pour surveiller les modifications apportées à une base de données sans interroger d'une manière ou d'une autre.

+0

Pour quelles raisons ne voulez-vous pas configurer un temporisateur pour interroger? – Jasarien

+0

Comme je l'ai noté ci-dessous, je ne suis pas sûr de la fréquence de sondage. Je dois essayer chaque seconde alors? Cela pourrait fonctionner, je vais devoir l'essayer. Cela semble juste exagéré? – petert

+0

Comme je l'ai dit dans les commentaires à ma réponse ci-dessous, vous pouvez essayer une valeur longue (comme 10 secondes ou même une minute) puis modifier si elle ne répond pas. – jv42

Répondre

1

Les solutions les plus simples auxquelles je peux penser sont d'avoir une action sur votre service RESTful qui extrait la dernière date de modification de la base de données. Périodiquement interroger à partir de votre application iPhone, puis actualisez la liste.

Par exemple, si vous créez un échafaudage pour les images:

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

REMARQUE: Vous devrez synchroniser votre héritage DB à ce Rails Table

Ensuite, chaque objet image est automatiquement créé avec un « updated_at "attribut.

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 

et vous devrez ajouter la ligne de correspondance suivante à vos itinéraires.rb

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

Maintenant, depuis l'application iPhone, vous pouvez tirer un fichier XML décrivant l'image la plus récente avec cette URL

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

Parse le moment le plus récemment mis à jour, et le comparer à votre dernière actualisation rendez-vous amoureux.

+0

Wow, merci pour le guide. Je vais essayer. – petert

+0

Votre explication m'a aidé à aller de l'avant avec le problème; Voter réponse, merci. – petert

1

Une réponse possible serait d'utiliser le service de notification push d'Apple, il fonctionnerait en dehors de votre application en bonus.

Cela dépend vraiment de ce que vous voulez fournir dans votre application. Vous pouvez simplement planifier les demandes de votre application sur votre serveur (ce qui pourrait être une application Ruby), donc vous interrogez pour les mises à jour. C'est probablement la solution la plus simple.

+0

L'utilisation de la notification push est une bonne idée, mais une installation typique du système n'est pas disponible sur Internet. Je n'ai pas exclu une solution de sondage où l'iPhone demande des mises à jour, mais ce n'est pas idéal car des changements peuvent survenir à tout moment. Merci encore. – petert

+1

Vous pouvez configurer l'interrogation à l'intervalle souhaité. D'abord j'essaierais quelque chose comme 5 ou 10 secondes, puis peaufinerais après le test. Ou si vous vous sentez comme exagéré, vous pouvez faire un système adaptatif qui essaye de deviner combien de fois il devrait interroger, basé sur des résultats de sondage précédents ;-) – jv42