Ruby on Rails - 不是grokking

时间:2010-08-05 03:40:06

标签: ruby-on-rails ruby

我最近一直在学习很多关于网络技术的知识,我想把一个整洁的小网站放在一起玩html,css,javascript,flash,以及你有什么。

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

到目前为止,我已经阅读了几个Rails教程但是我在处理工作并理解组件如何协同工作方面遇到了很多麻烦,即使我可以通过盲目地按照上述教程来完成工作

我想我理解MVC的概念。显然,应用程序的业务模型与视图实现等分开是有意义的。当然,这很好。据我所知,RoR需要(?)一个数据库。当然,当我的网站发展到需要跟踪客户和处理数据的程度时,我会希望这样。

但我在哪里可以获得实际功能?在哪里指定服务器如何响应来自浏览器的请求?这不应该是直截了当的吗?我是否需要设置数据库才能获得“hello world”页面?

我认为可能发生的事情是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并且当我在浏览器中打开它时仍然会出现“路由错误”。我在cmdline上得到一个巨大的丑陋堆栈跟踪。搞砸了!

显然,我应该参加一个课程,向我展示如何使用Rails,更重要的是,它是否适合我的目的。那么......我应该继续努力解决这个问题吗?如果是这样,有人可以给我一个很好的教程,或者向我解释为什么我看到的教程没有帮助我?

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

感谢阅读。 :)

3 个答案:

答案 0 :(得分:5)

你是过度思考的方式。这并不是那么糟糕 - 你想要了解所有东西如何组合在一起并且有效,这很棒,但Rails会为你处理绝大多数这样的东西。

出于开发目的,您很可能会使用Ruby webrick“server”,您可以通过执行以下操作从应用程序主目录运行:ruby script / server

现在,无论何时转到您的应用程序(默认情况下将在http://localhost:3000/运行),此服务器将处理您的请求并返回适当视图的html。如果您已创建应用程序并设置了数据库,那么转到我提到的网址将向您显示来自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 ]

取消注释最后一行,并确保将active_record留在其中。

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

Rails实际上非常适合构建小沙箱网站 - 一旦你克服了最初的学习曲线,就可以快速完成并运行。

答案 1 :(得分:3)

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

不需要数据库。 (你需要从Zachary在他的回答中显示的框架堆栈中删除ActiveRecord。)

答案 2 :(得分:1)

Rails不适合这个。使用apache作为静态文件服务器可能会更好。或者,您可以像这样重写套接字服务器:

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
}