2010-08-05 3 views
2

J'ai beaucoup appris sur les technologies Web récemment et je veux mettre en place un petit site Web pour jouer avec html, css, javascript, flash, et quoi d'autre.Ruby on Rails - pas groking

Je sais qu'en ce qui concerne le navigateur Web tout ce que je dois faire est d'envoyer un fichier texte (généralement HTML) à partir de mon serveur en utilisant HTTP sur TCP. J'ai déjà suivi quelques tutoriels Rails, mais j'ai beaucoup de mal à faire fonctionner les choses et à comprendre comment les composants fonctionnent ensemble, même si je pouvais le faire fonctionner en suivant aveuglément les tutoriels à l'adresse suivante: http://www.youtube.com/watch? lettre. Je pense que je comprends le concept MVC. De toute évidence, le modèle économique d'une application a du sens pour être séparé de la mise en œuvre de la vue, etc. Bien sûr, c'est bien. D'après ce que je comprends, RoR a besoin (?) D'une base de données. Bien sûr, quand mon site web grandit au point où j'ai besoin de suivre les clients et de croquer les données, je le veux.

Mais où puis-je trouver la fonctionnalité actuelle? Où puis-je spécifier comment mon serveur répond aux demandes des navigateurs? Cela ne devrait-il pas être simple? Ai-je besoin de créer une base de données juste pour obtenir ma page "Bonjour tout le monde"?

Je pense que ce qui pourrait arriver est que Rails est conçu pour faire quelque chose dont je n'ai pas besoin (encore?). Il fait beaucoup de choses pour moi que je ne comprends pas, et pour que je sois à l'aise, je devrais creuser beaucoup de matériel pour le comprendre.

Ce qui m'a amené à ce point, je suis à la recherche de la « prochaine étape » après ce petit serveur que je jouais avec:

require 'socket'  
server = TCPServer.open(8080) 
loop { 
    Thread.start(server.accept) do |client| 
    client.puts(Time.now.ctime) # server sends dynamic page consisting of current time 
    client.flush 
    while (str = client.gets) do 
     puts "recvd >> "+str # show what server gets from client 
     if str.chop.length == 0 then break end # detect end of transmission 
    end 
    puts "done" 
    client.close 
    end 
} 

Ce petit morceau de code est plus que la moitié du chemin à ce que je besoin de le faire. Je suis resté coincé sur quelque chose de plutôt idiot. Je ne sais toujours pas comment prendre un fichier sur le disque et l'envoyer au client. Je me dis que j'ouvrirais un flux vers le fichier demandé et que je le redirigerais vers le socket ... Aucune idée de comment le faire dans ruby. Alors j'ai pensé, hé, peut-être que Rails le ferait pour moi. Maintenant, je suis un tas de directions, enfin obtenir le serveur fonctionne sur mongrel, et j'essaie ceci: ruby script\generate controller MyTest et toujours obtenir une "erreur de routage" quand je l'ouvre dans le navigateur. Je reçois une trace de pile moche géante sur la ligne de commande. J'en ai rien à faire! Il est clair que je devrais prendre un cours qui me montrera comment utiliser Rails et, plus important encore, si c'est excessif pour mes besoins. Alors ... dois-je continuer à essayer de comprendre? Si oui, quelqu'un peut-il me montrer un bon tutoriel, ou m'expliquer pourquoi les tutoriels que j'ai vus ne m'aident pas?

Devrais-je simplement utiliser EventMachine pour créer mon serveur? Je veux juste faire un joli serveur web simple et rapide.

Merci d'avoir lu. :)

Répondre

5

Vous êtes beaucoup, beaucoup de choses sur-pensée. Pas que ce soit mauvais du tout - c'est génial que tu veuilles apprendre les entrailles de la façon dont tout s'accorde et fonctionne, mais Rails gère la grande majorité des choses comme ça pour toi.

Pour des fins de développement, vous êtes plus susceptible d'utiliser le « serveur » webrick Ruby, que vous pouvez exécuter à partir des applications répertoire en faisant: Script ruby ​​/ serveur

Maintenant, chaque fois que vous allez à votre demande, qui est par défaut en cours d'exécution à: http://localhost:3000/, ce serveur va traiter vos demandes et retourner le code HTML pour la vue appropriée. Si vous avez créé votre application et configuré une base de données, aller à l'url que j'ai mentionné vous montrera un message "bienvenue à bord" de Rails, vous permettant de savoir que tout est opérationnel. Plus tard, lorsque vous appuierez votre application sur la production, vous utiliserez le serveur Apache, mais vous n'aurez pas à vous soucier des choses que vous avez mentionnées dans votre question.

Il est tout à fait possible d'utiliser Rails sans une base de données, consultez config/environment.rb:

# Skip frameworks you're not going to use. To use Rails without a database, 
# you must remove the Active Record framework. 
# config.frameworks -= [ :active_record, :active_resource, :action_mailer ] 

Juste décommenter cette dernière ligne et assurez-vous laisser active_record en elle.

Je pense que ce qui va vous aider à mieux surmonter votre confusion est de faire une recherche sur le fonctionnement du routage Rails, qui est contrôlé par le fichier config/routes.rb. Je pense que cela vous aidera à comprendre comment Rails accepte et réagit aux demandes entrantes. Rails est en fait parfait pour construire de petits sites Web de bac à sable avec lesquels jouer - une fois que vous avez dépassé la courbe d'apprentissage initiale, vous pouvez obtenir des choses très rapidement.

1

Rails n'est pas approprié pour cela. Il vaudrait peut-être mieux utiliser apache pour un serveur de fichiers statique. Ou bien, vous pouvez réécrire votre serveur socket comme ceci:

require 'socket' 
server = TCPServer.open(8080) 
loop { 
    Thread.start(server.accept) do |client| 
    client.puts(Time.now.ctime) # server sends dynamic page consisting of current time 
    client.flush 
    while (str = client.gets) do 
     puts "recvd >> "+str # show what server gets from client 
     if str.chop.length == 0 
     client.write File.read(the_file_to_send) 
     break 
     end 
    end 
    puts "done" 
    client.close 
    end 
} 
+0

Wow, lire et écrire. Ne pouvait pas être plus simple. Merci. –

3

Votre serveur de temps dans Rails:

# app/controllers/time_controller.rb 
# after ./script/server, available at: 
# http://localhost:3000/time/ 
class TimeController < ApplicationController 
    def index 
    render :text => Time.now.ctime 
    end 
end 

Base de données non nécessaires. (Vous devez supprimer ActiveRecord de la pile de frameworks comme Zachary le montre dans sa réponse).