mysql – CGI语言选择

好的,我在这里问了几个相关的问题,结果只有更多问题,我现在意识到这是因为我没有足够的背景信息.所以我会让它更通用:

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

>读取传入的POST变量
>运行一些非常简单的逻辑
>为简单的CRUD操作命中MySQL数据库
>返回页面上javascript要使用的纯字符串数据

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

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

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

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

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

解决方法:

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

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

乘客

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

上一篇:用Python 3.4在MySQL中创建表


下一篇:mysql – 当一切都已经是UTF-8时,为什么还需要Encode :: decode(‘UTF-8’,$var)?