CGI语言选择

时间:2009-11-24 16:30:01

标签: mysql ruby web-services cgi

好的,我在这里问了一些相关的问题,结果只有更多的问题,我现在意识到这是因为我没有足够的背景信息。所以我会把它变得更通用:

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

  • 阅读
  • 中传递的POST变量
  • 运行一些非常简单逻辑
  • 点击MySQL数据库以获取简单的CRUD操作
  • 返回页面上javascript要使用的纯数据字符串

我认为Ruby是一个很好的选择,因为每个人都在为它的设计做得很好,而且我一直在玩它 - 而不是RoR,只是Ruby用于简单的脚本编写任务 - 我有点喜欢它。

我的问题是,我毫无希望地被那里的万亿辅助库和框架搞糊涂了。我不知道这些是什么,因此如果我需要它们中的任何一个:Rack,Sinatra,Camping,mod_ruby,FastCGI等。

学习PHP和我们会更容易吗?或者我可以将我的.rb文件放入cgi-bin文件夹(我使用Apache进行托管)并使用ruby cgi库来获取我的变量?

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

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

6 个答案:

答案 0 :(得分:2)

使用jQuery和PHP。

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

答案 1 :(得分:2)

您不希望使用完全成熟的框架中的任何功能,因此请勿使用。更少的代码=更少的错误=更少的安全噩梦。

CGI

与其他方法相比,CGI有一些性能上的缺点,但仍然(在我看来)是最简单易用的方法。这就是你使用内置cgi库的方式:

require "cgi"
cgi= CGI.new

answer= evaluate(cgi.params)

cgi.out do
    answer
end

另一种低技术易用的变体是机架。 Rack是一个抽象层,适用于许多webserver接口(cgi,fastcgi,webrick,...)。它的简单性可以与仅使用cgi进行比较。将以下内容放入一个以.ru结尾的文件到你的cgi目录中。

#!/usr/bin/rackup
require "rack/request"

run (lambda do |env|
  request= Rack::Request(env)

  anwser= evaluate(request.params)

  return [200, {}, answer]
end)

这与cgi似乎没有什么不同,但它为您提供了更多的可能性。如果您在本地计算机上执行此文件,则将启动webrick webserver。此网络服务器将提供您在.ru文件中描述的网页。

其他接口

快速CGI

fast-cgi几乎就像CGI一样。不同的是,在CGI中,您的脚本会在每个必须处理的请求中启动。使用fast-cgi,您的脚本仅对所有请求启动一次。有一个库可以在ruby中编写fast-cgi脚本。

mod_ruby

mod_ruby是一个用于apache的内置ruby解释器。它类似于apache中的mod_php。

杂种

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服务器。我认为这对你的需求来说太过分了。

phusion passenger

乘客也称为mod_rails或mod_rack。它是apache和nginx托管rails和rack应用程序的模块。根据他们的网站,乘客使用铁轨比单独使用铁轨少1/3。如果您为机架编写软件,可以使用乘客而不是cgi或fast-cgi来加快速度。

答案 2 :(得分:1)

Sinatra学习和使用非常简单。使用Phusion Passenger(就像Rails和Sinatra这样的ruby框架就像mod_php一样)也很容易部署。这里的说明:http://blog.squarefour.net/2009/03/06/deploying-sinatra-on-passenger/

如果你发现你需要的不仅仅是Sinatra给你的东西,我推荐Rails。使用Passenger进行设置更加容易,因为几乎不需要任何配置。 (见modrails.com)。

答案 3 :(得分:1)

PHP非常易于使用,因为它是专为此类设计的。想要读取POST变量?他们在$ _POST。想查询MySQL? mysql_query(“SELECT`thing` FROM`table`”);.如果您需要帮助,谷歌搜索“php what_you_need_to_do”几乎总是在php.net上返回结果,这非常有帮助。

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

答案 4 :(得分:0)

我很好奇我认为你对Rails的抵制。你说你想要“花更多的时间在脚本本身而不是在配置上”,但你似乎无法解雇Rails。 Rails是关于约定优于配置的。如果您花时间了解Rails如何做事,您可以通过遵循框架的惯例“免费”获得大量功能。

如果你想制作一个简单的网络应用程序,Rails真的是一个非常轻松和好的开始方式。你可以使用一个sqlite数据库,甚至不会搞乱MySQL(不会扩展,但对于学习或简单的应用程序,它没关系)。确实存在更简单的框架,但是由于您似乎对Web编程不熟悉,我建议您从文档和知识渊博的人员那里获得最多支持。按照旧格言:先让它工作,然后再进行优化。

我能看到的唯一关键点是Apache集成......目前关于Rails部署的共识似乎集中在使用轻量级httpds代替Apache。有一个mod_fcgid似乎是使用Apache的最佳方式(如果你可以做自定义mod,mod_ruby已被弃用,错误和慢,我读过)。或者有Phusion Passenger,这似乎是最新和最好的方式。在标准CGI环境中运行Rails将产生可怕的性能(但实际上适用于任何CGI框架),因为为每个请求执行解释器+框架的开销。如果你使用能够将解释器+框架保存在内存中的东西,你将获得更好的性能。

答案 5 :(得分:0)

我个人喜欢Django。我在Ruby on Rails上遇到了一个问题,当我想做一些简单的事情时,我只是被一切都搞得一团糟,这听起来像你想做的事(因为你说ROR感觉像是矫枉过正)。我发现Django的酷炫之处在于,如果你想要所有东西,那么你可以通过插入它来获得所有东西......但是如果你想要的少,那么你就不要插入那种技术而且它的重量要轻得多。

以“观点”为例。与ROR一样,Django使用MVC。但是,如果您只想返回一串数据并且不需要视图,那么您不需要插入视图。但是如果你以后决定它在视图中会更有条理,那么你可以在那时轻松插入它。

以下是他们的网站:http://www.djangoproject.com/