代码之家  ›  专栏  ›  技术社区  ›  Steven Lu

铁轨上的红宝石-不摸索

  •  2
  • Steven Lu  · 技术社区  · 14 年前

    最近我学习了很多关于网络技术的知识,我想建立一个整洁的小网站来使用HTML、CSS、javascript、flash和你的东西。

    我知道,就Web浏览器而言,我需要做的就是使用TCP上的HTTP从服务器发送文本文件(通常是HTML)。

    到目前为止,我已经学习了一些Rails教程,但是我在工作和理解组件如何协同工作方面遇到了很多困难,即使我可以盲目地遵循上面提到的教程来完成工作。

    我想我理解MVC的概念。显然,将应用程序的业务模型与视图实现分开是有意义的,等等。当然,这没关系。根据我对RoR需求的理解(?)数据库。当然,当我的网站发展到我需要跟踪客户和处理数据的时候,我会想要的。

    但是我从哪里可以得到实际的功能呢?在哪里指定服务器如何响应来自浏览器的请求?这不是很直接吗?我需要建立一个数据库来打开我的“你好世界”页面吗?

    我想可能发生的事情是Rails被设计成做一些我不需要的事情(还没有?)它为我做了很多我不理解的事情,为了让我感到舒适,我必须挖掘大量的材料来解决这个问题。

    使我达到这一点的是,在我玩这个小服务器之后,我正在寻找“下一步”:

    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
    }
    

    这一小段代码已经超过了我需要它做的一半。我被一些非常愚蠢的事情缠住了。我仍然不知道如何将文件保存在磁盘上并发送给客户机。我想我会打开一个流到请求的文件,并通过管道将其传输到套接字…不知道如何在Ruby中做到这一点。所以我想,嘿,也许Rails会帮我的。

    现在,我按照一系列的指示,最终让服务器在Mongrel上运行,然后我尝试: ruby script\generate controller MyTest 当我在浏览器中打开它时,仍然会得到一个“路由错误”。我在命令行上得到一个巨大的丑陋的堆栈跟踪。拧开这个!

    很明显,我应该参加一个课程,向我展示如何使用Rails,更重要的是,它是否为我的目的而过度杀戮。所以…我应该继续想办法吗?如果是这样,有人能给我看一个好的教程吗,或者向我解释为什么我看到的教程没有帮助我?

    我应该尝试使用EventMachine来制作服务器吗?我只想制作一个简单快捷的Web服务器。

    谢谢你的阅读。:)

    3 回复  |  直到 14 年前
        1
  •  5
  •   Zachary Wright José Valim    14 年前

    你真是太好了,想得太多了。这一点也不坏——你想了解所有东西是如何结合在一起和工作的,这很好,但是Rails可以为你处理大多数类似的事情。

    出于开发目的,您很可能会使用ruby webrick“server”,您可以从应用程序主目录运行该服务器,方法是:ruby script/server

    现在,每当您转到应用程序时,默认情况下将在以下位置运行: http://localhost:3000/ ,此服务器将处理您的请求并返回相应视图的HTML。如果您已经创建了应用程序并设置了数据库,那么访问我提到的URL将显示一条来自Rails的“欢迎加入”消息,让您知道一切都已启动并正在运行。稍后,当您将应用程序推送到生产环境中时,您将使用Apache服务器,但是,您仍然不必担心您在问题中提到的事情。

    完全可以在没有数据库的情况下使用Rails,请查看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 ]
    

    只需取消最后一行的注释,并确保在其中保留活动的记录。

    我认为最能帮助您克服困惑的是研究Rails路由是如何工作的,它由config/routes.rb文件控制。我认为这将帮助您理解Rails如何接受和响应传入的请求。

    Rails实际上是构建小沙盒网站的完美之选——一旦你越过了最初的学习曲线,你就可以很快地完成任务并运行起来。

        2
  •  3
  •   Amadan    14 年前

    您的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
    

    不需要数据库。(您确实需要从框架堆栈中删除ActiveRecord,Zachary在他的答案中显示了这一点)。

        3
  •  1
  •   Adrian    14 年前

    轨道不适用于此。你最好用 apache 对于静态文件服务器。或者,您可以这样重新编写socket服务器:

    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
    }