Tag: cgi

HTTP请求从Web服务器分派到CGI / FastCGI进程

为了更好地了解在Web应用程序中如何处理HTTP请求,像Apache这样的Web服务器如何向其中一个虚拟主机发送请求? 无论框架(Rails / PHP / Java)如何,执行的初始程序是什么? 如果有人可以列举Rails的例子(我知道Rails),我将不胜感激。 提前致谢!

Rails与Ruby CGI

我有一个老板,他确信学习Rails是一个学习曲线太陡峭而且从劳动力的角度看,当直接在Apache上运行作为CGI应用程序的Ruby时,它并不符合成本效益。 为了我们的改写,他建议我们使用直接的Ruby没有框架而不是Rails(或Merb,Sinatra等)。我内心相信这是一个坏主意,但我无法将我的案例纳入话。 到目前为止我提出的一些想法: Rails通过MVC促进更好的代码重用和更好的关注点分离 一个运行rails的商店对于合格的求职者来说看起来更有吸引力,因为Rails在他/她的简历上看起来更好,工作更有趣等等。 (我可能错了)Rails在Passenger上会有更好的性能,因为Passenger自动将连接池连接到数据库,因为手动CGI应用程序必须自行管理或不管理,导致性能下降。 Rails是一种经过validation的技术,至少肯定不仅仅是一个手动的CGI框架 有什么理由我错过了或错了吗? 是否有我不知道的有效权衡?

Ruby cgi需要重新加载apache以获得新值吗?

我在Ubuntu上安装了apache的phusion-passenger。 在我的config.ru中,我有以下代码: require ‘cgi’ $tpl = CGI.new[‘myvar’] + ‘.rb’ app = proc do |env| [200, { “Content-Type” => “text/html” }, [$tpl]] end run app 那么当我在http://localhost/?myvar=hello访问我的浏览器时,我看到打印出来的单词hello ,这很好。 然后我将URL更改为http://localhost/?myvar=world ,但页面仍显示hello 。 只有在我重新加载apache之后页面才会显示world 。 在使用phusion-passenger之前,我使用mod_ruby和apache。 如果我没记错的话,我不需要重新启动apache来获取CGI变量来打印更新的值。 我并不是因为需要使用CGI。 我只是希望能够获取查询字符串参数,而无需每次都重新加载apache。 我没有使用rails或Sinatra,因为我只是试图围绕Ruby语言,以及使用apache的phusion-passenger是什么。

将HTML表单发布到remote.cgi – 用Ruby编写?

我正在一个托管在微软办公室现场服务上的网站上工作。 它有一个联系表格,使访客可以与业主联系。 我想编写一个位于单独服务器上的Ruby脚本,表单将POST到该脚本。 它将解析表单数据并通过电子邮件将详细信息发送到预设地址。 然后,该脚本应将浏览器重定向到确认页面。 我有一台运行nginx和postfix的ubuntu hardy机器。 安装了Ruby,我们将看到使用Thin和它的Rackfunction来处理脚本。 现在是编写脚本,我画了一个空白。 已经很长时间了,如果我没记错的话,这个过程是这样的。 读取HTTP标头 解析参数 发送电子邮件 发送重定向标头 从广义上讲,问题已得到解答。 弄清楚如何使用答案比预期更复杂,我认为值得分享。 第一步: 我非常突然地了解到nginx并不直接支持cgi脚本。 您必须使用其他一些进程来运行脚本并获取nginx来代理请求。 如果我在php中这样做(后来我认为这将是一个更自然的选择)我可以使用像php-fcgi这样的东西,并期望生活会非常直接。 Ruby和fcgi感觉相当令人生畏。 但如果我们放弃在运行时加载这些东西的理想,那么Rack可能是最直接的解决方案,而Thin包含我们所需要的一切。 学习如何使用它们制作基本的小应用程序对像我这样的相对Rails新手来说是非常有益的。 Rails应用程序的基础似乎隐藏了很长时间,而Rack帮助我进一步拉开窗帘。 尽管如此,遵循耶胡达的建议并查找sinatra是另一个惊喜。 我现在有一个在Thin实例中运行的基本sinatra应用程序。 它通过unix socket与nginx通信,我收集的是标准方式。 Sinatra以非常优雅的方式处理不同的请求和路由到应用程序。 您只需要一个get ‘/’ {}来开始处理对虚拟主机的请求。 要添加更多(以干净的方式),我们只需在主文件中包含routes / script.rb即可。 # cgi-bin.rb # main file loaded as a sinatra app require ‘sinatra’ # load cgi routes require ‘routes/default’ require ‘routes/contact’ […]

在脚本完成之前使用Ruby CGI返回响应?

任何人都知道如何在CGI脚本执行完之前在Ruby中发送CGI响应? 我正在创建一个即发即弃的HTTP API。 我希望客户端通过HTTP将数据推送给我并使响应成功返回, 然后它调整数据并进行一些处理(客户端不必等待响应)。 我尝试了几件不起作用的东西,包括fork。 通过HTTP调用时,以下将等待5秒。 #!/usr/bin/ruby require ‘cgi’ cgi = CGI.new cgi.out “text/plain” do “1” end pid = fork if pid # parent Process.detach pid else # child sleep 5 end