代码之家  ›  专栏  ›  技术社区  ›  LoveMeSomeCode

CGI语言选择

  •  3
  • LoveMeSomeCode  · 技术社区  · 15 年前

    好的,我在这里问了一些相关的问题,最后只问了更多的问题,我现在意识到这是因为我没有足够的背景信息。因此,我将使其更通用:

    我需要做一个简单的web应用程序。静态HTML/JQuery页面将向某些服务器端代码发送AJAX POST请求,这将:

    • 读取传入的POST变量
    • 非常 简单逻辑
    • 点击MySQL数据库获取简单的CRUD操作
    • 返回页面上javascript使用的普通数据字符串

    我的问题是,我被成千上万的助手库和框架搞糊涂了。我不知道这些是什么,因此我是否需要它们:Rack、Sinatra、Camping、mod_ruby、FastCGI等等。

    编辑:至于Rails,我只是假设它对于我想要的东西来说是过度的,但我可能错了。我看了一下,快速生成基于数据的网站似乎很酷,但这不是我想要做的。我不希望用户有任何表单页面。我不希望他们输入数据或查看记录。我甚至不想返回任何HTML。我只想在服务器上安装一个ruby脚本,在post请求中传递几个变量,并返回一个JSON字符串作为响应。我需要一些基本的cookie/会话/状态管理

    这在C#和ASP.NET中使用webservices是一件非常容易的事情,但它似乎与开源技术非常混淆。

    6 回复  |  直到 15 年前
        1
  •  2
  •   cllpse    15 年前

    使用jQuery和PHP。

    这两种技术都有很好的文档记录,您应该能够在几个小时内启动并运行应用程序。你听起来好像知道一两件事——谈论积垢操作等等——所以我不会用例子让你厌烦。就JSON而言,可能有一百万个PHP库用于输出JSON对象。

        2
  •  2
  •   johannes    15 年前

    您不想使用成熟框架中的任何功能,所以不要使用。更少的代码=更少的bug=更少的安全噩梦。

    CGI

    require "cgi"
    cgi= CGI.new
    
    answer= evaluate(cgi.params)
    
    cgi.out do
        answer
    end
    

    另一种低技术易用的变体是机架。Rack是一个抽象层,适用于许多Web服务器接口(cgi、fastcgi、webrick等等)。它的简单性可以与只使用cgi相比。将以下内容放入cgi目录中以.ru结尾的文件中。

    #!/usr/bin/rackup
    require "rack/request"
    
    run (lambda do |env|
      request= Rack::Request(env)
    
      anwser= evaluate(request.params)
    
      return [200, {}, answer]
    end)
    

    这似乎与cgi没有太大区别,但它给了您更多的可能性。如果您必须在本地计算机上执行此文件,rackup将启动webrick Web服务器。此Web服务器将提供您在.ru文件中描述的网页。

    其他接口

    快速cgi

    快速cgi的工作原理几乎与cgi相同。不同之处在于,在CGI中,您的脚本开始处理它必须处理的每个请求。使用快速cgi,所有请求的脚本只启动一次。有一个库可以用ruby编写快速cgi脚本。

    红宝石

    杂种

    mongrel是ruby应用程序的独立Web服务器。这是一个简单的hello world示例。

    require 'mongrel'
    
    class SimpleHandler < Mongrel::HttpHandler
       def process(request, response)
         response.start(200) do |head,out|
           head["Content-Type"] = "text/plain"
           out.write("hello world!\n")
         end
       end
    end
    
    h = Mongrel::HttpServer.new("0.0.0.0", "3000")
    h.register("/hello", SimpleHandler.new)
    h.run.join
    

    Mongrel通常用于rails和其他ruby框架。大多数人在端口80上使用apache或其他东西。此Web服务器将请求分发到其他端口上运行的多个mongrel服务器。我认为这对你的需求来说太过分了。

    乘客也被称为mod_导轨或mod_机架。它是apache和nginx用来承载rails和rack应用程序的模块。根据他们的网站,RailsWithPassenger使用的ram比rails本身少1/3。如果您为rack编写软件,您可以通过使用passenger而不是cgi或fast cgi使其速度更快一些。

        3
  •  1
  •   insane.dreamer    15 年前

    Sinatra非常易于学习和使用。使用Phusion Passenger(类似于Rails和Sinatra等ruby框架的mod_php)也很容易部署。此处的说明: http://blog.squarefour.net/2009/03/06/deploying-sinatra-on-passenger/

    如果您发现您需要的比Sinatra提供的更多,我推荐Rails。由于几乎不需要任何配置,因此与乘客一起设置更容易。(见modrails.com)。

        4
  •  1
  •   Brendan Long    15 年前

    PHP非常容易使用,因为它是专门为这类事情设计的。要读取POST变量吗?他们在美元邮政。想要查询MySQL吗?mysql\u查询(“从“表”中选择“某物”);。如果你需要帮助,谷歌搜索“php你需要做什么”几乎总是在php.net上返回结果,这非常有用。

    对于您正在做的事情,您不需要任何额外的框架。

        5
  •  0
  •   mjmac    15 年前

    如果你想制作一个简单的web应用程序,Rails确实是一个非常轻松的好方法。你可以使用sqlite数据库,甚至不用乱动MySQL(不会扩展,但对于学习或简单的应用程序来说都可以)。确实有更简单的框架,但由于您似乎对web编程还不熟悉,我建议您从在文档和知识渊博的人员方面获得最多支持的内容开始。遵循古老的格言:先让它工作,然后再优化。

    我能看到的唯一症结是Apache集成。。。最近,关于Rails部署的共识似乎集中在使用轻量级httpd代替Apache上。有一个mod_fcgid,如果你可以定制mod的话,它似乎是用Apache实现它的最好方法(mod_ruby已经被弃用了,有缺陷而且速度慢)。还有一种是Phusion Passen,这似乎是最新也是最棒的方式。在标准CGI环境中运行Rails将产生糟糕的性能(但实际上,这适用于任何CGI框架),这是由于为每个请求执行解释器+框架的开销造成的。如果您使用能够将解释器+框架保留在内存中的东西,您将获得更好的性能。

        6
  •  0
  •   Adam    15 年前

    我个人喜欢Django。我在RubyonRails上遇到了一个问题,当我只想做一些简单的事情时,我被所有的事情压得喘不过气来,这听起来像是你想做的(因为你说ROR感觉太过分了)。我发现Django很酷的一点是,如果你想要所有东西,那么你可以通过插入它来获得所有东西……但是如果你想要的更少,那么你就不插入该技术,而且它更轻。

    以“视图”为例。Django和ROR一样,使用MVC。但是,如果您只想返回一个数据字符串,而不需要该视图,那么就不需要插入该视图。但是,如果以后您决定它在视图中更具组织性,那么您可以在那个时候轻松地插入它。

    http://www.djangoproject.com/