Comment construire une application Shortlink avec Ruby et Redis

Dans ce didacticiel, nous allons créer une application Web à liaisons courtes rapides avec Ruby, le cadre Web Sinatra et la base de données Redis. À la fin de ce didacticiel, vous vous retrouverez avec une application Web à liaison courte, extrêmement simple et très performante, très facile à adapter..


Étape 1. Commencer

Pour suivre ce tutoriel, vous aurez besoin de Ruby installé sur votre système (j'utilise 1.9.2), ainsi que de la sinatra et redis gemmes et Redis.

Si Ruby n'est pas déjà installé sur votre système, vous devriez pouvoir l'installer relativement facilement. Les utilisateurs d’OS X, Debian ou CentOS peuvent avoir besoin de compiler une version plus récente de Ruby. C'est un processus assez simple.

Reportez-vous ici pour savoir comment installer Ruby, via RVM.

Vous devez maintenant installer les rubis nécessaires. Les gemmes constituent un moyen pratique d’installer pratiquement toutes les bibliothèques Ruby disponibles. Tapez simplement ce qui suit dans la fenêtre de votre terminal pour installer les gems requis:

 bijou installer sinatra redis

Nous devrons également installer et compiler Redis. Ne vous inquiétez pas, c'est vraiment petit et il ne faut qu'environ 15 secondes pour compiler sur ma machine.

 wget http://redis.googlecode.com/files/redis-2.0.4.tar.gz tar zfx redis-2.0.4.tar.gz cd redis-2.0.4 faire sudo faire installer cd? 

Vous pouvez exécuter le serveur Redis en tapant serveur redis dans votre terminal, et si vous avez envie de jouer avec Redis, donnez redis-cli depuis.


Étape 2. Construire l'application

L'un des avantages de Sinatra est la rapidité et la facilité avec lesquelles il est facile de créer de petites applications simples - c'est presque ridicule.!

Le code de l'application shortlink elle-même ne sera pas très long, il devrait donc être très facile à comprendre. Ne vous inquiétez pas si vous ne le comprenez pas au début, j'expliquerai bientôt comment cela fonctionne..

Faire un dossier pour votre webapp - j'ai appelé le mien redis-ruby-shortlink - et mettez les fichiers suivants dedans.

shortlink_app.rb

 require 'sinatra' require 'redis' redis = Redis.Les nouveaux collaborateurs incluent Rack :: Utils alias_method: h,: escape_html def random_string (longueur) rand (36 ** longueur) .to_s (36) end end get '/' do erb: index end post '/' do if params [: url] et non params [: url] .empty? @shortcode = random_string 5 redis.setnx "liens: # @ shortcode", params [: url] end erb: index end get '/: shortcode' do @url = redis.get "liens: # params [: shortcode ] "redirect @url || '/' fin

C'est tout. Assez simple, hein?

Dans cette petite application Sinatra ci-dessus, j'ai fait quelques choses clés. Dans les deux premières lignes, j'apporte les bibliothèques dont nous avons besoin - sinatra et redis. Sur la ligne 4, j'établis une connexion avec le serveur Redis en écoutant localhost. Les lignes après c'est là que tout commence à devenir intéressant!

Dans Sinatra, vous pouvez spécifier des aides qui sont exécutées chaque fois que l'un de vos itinéraires (ceux obtenir et poster parties) est exécuté. Nous pouvons mettre tout ce dont nous pourrions avoir besoin souvent dans le bloc des aides. Dans mon bloc des aides, j'ai aliasé h à Rack's escape_html, et défini une méthode pour générer une chaîne alphanumérique aléatoire d'une certaine longueur.

Ensuite sont les itinéraires. Le premier itinéraire est plutôt simple. Chaque fois qu'un client fait une demande GET à /, ça rend juste la index.erb page (j'ai inclus la source plus bas.)

Le prochain itinéraire est l'endroit où les bonnes choses se passent. Tout d'abord, nous nous assurons que l'utilisateur a bien saisi une URL dans la zone URL. Si tel est le cas, nous générons un code court aléatoire de cinq caractères en appelant le chaîne_aléatoire méthode que nous avons définie auparavant. Ensuite, nous disons à Redis de setnx (Ensemble si n eXists), une clé représentant notre shortcode à son URL. Redis est un très rapide et simple base de données clé / valeur, ou un NoSQL base de données. Ces bases de données sont conçues pour des opérations de recherche de clé / valeur très lourdes et, à mesure qu’elles éliminent la majeure partie de la complexité de SQL, elles peuvent le faire. beaucoup plus rapide. La partie "liens:" de la clé n'est pas strictement requise, mais il est recommandé de scinder vos clés Redis en espaces de noms Par conséquent, si vous décidez ultérieurement de stocker davantage d'informations dans la même base de données, vous n'avez pas à vous soucier des conflits. Après tout cela, nous rendons la même chose index.erb page comme avant. Remarquez que si l'utilisateur n'entre rien, cet itinéraire fait la même chose que l'itinéraire précédent..

Le dernier itinéraire est exécuté lorsqu'un client visite un lien court. Cet itinéraire introduit ce qu'on appelle un Paramètre d'URL. Par exemple, lorsqu'un client visite '/ foobar', le :petit code une partie de l'itinéraire correspond à 'foobar'. Nous pouvons accéder aux paramètres d'URL de la même manière que n'importe quel autre paramètre - le params hacher. Nous cherchons le shortcode dans la base de données Redis. S'il n'y a pas de clé telle que celle que nous essayons d'accéder, Redis reviendra néant. La ligne suivante redirige vers l'URL extraite de Redis (si elle existe) ou vers la page d'accueil si ce n'est pas le cas..

views / index.erb

index.erb est principalement du balisage ennuyeux, bien qu'il comporte quelques lignes que je voudrais signaler.. erb représente Ruby intégré, et nous permet de mélanger Ruby et HTML, comme vous le feriez avec PHP.

    App Shortlink    

application shortlink

<% if @shortcode %>
Votre URL raccourcie est: "> http://my-shortlink-app.com/<%= @shortcode %>
<% end %>

Une différence entre erb et PHP que vous avez peut-être déjà remarquée (à part les différentes langues) est que PHP utilise et , erb utilise <% et . La seule chose intéressante à propos d’index.erb est le bloc if qui ne rend que la partie de la page qui montre le lien court si le @petit code la variable est définie. Cela nous permet d'utiliser la même vue pour tout. Un autre point à noter est que nous nous sommes assurés que HTML échappe params [: url], afin que nous ne soyons pas victime d'une attaque XSS. Autre que ces points, il s'agit essentiellement d'une page Web standard.


Étape 3. Mise à l'échelle

Une des choses que j'ai brièvement mentionnées dans l'introduction de ce tutoriel est la facilité avec laquelle nous pouvons évoluer grâce à Redis. Tandis que la mise à l'échelle vers plusieurs bases de données SQL est une affaire compliquée, celle de Redis est en réalité assez triviale. Ceci est un résultat direct de la simplicité de Redis. Si vous devez passer à plusieurs redimensionnements, ajoutez les éléments suivants à votre configuration Redis:

 slaveof master-redis-server.my-shortlink-app.com 6379

Une fois que vous avez configuré plusieurs esclaves, il suffit de modifier légèrement l'application Sinatra ci-dessus pour que chaque instance de Sinatra se connecte à un serveur Redis aléatoire (si vous êtes au stade où vous devez redimensionner Redis, je vais supposer que vous avez déjà eu à déployer plusieurs instances de Sinatra.;)


Conclusion

J'espère que ce tutoriel vous aura été utile, que vous souhaitiez gérer votre propre service de liaison directe ou que vous soyez simplement intéressé par les dernières technologies de pointe mises à la disposition des développeurs Web. Dans ce didacticiel, j'ai couvert quelques logiciels plutôt intéressants qui ont été extrêmement utiles non seulement pour moi, mais pour des milliers d'autres développeurs. Profitez de votre bricolage!