2011-06-18 82 views
21

对我来说,当我搜索某些相关的ruby时,所有与rails相关的ruby都弹出了结果。所以没有人使用原始的红宝石了?如何在任何web服务器上运行简单的ruby脚本(Apache或Mongrel或其他任何东西)

不过,我是新来的红宝石。今天早上我只是试图在web服务器上运行一个简单的hello world ruby​​脚本,首先是apache 2,然后尝试了混血儿。但不幸的是我失败了。我尽可能使用Google搜索,但结果只显示关于轨道上的红宝石。那么真的有什么办法可以在任何Web服务器上运行ruby脚本,或者即使我只想做一个hello world应用程序,我也必须使用ror。

+3

听起来你是从PHP或类似来到红宝石。与Ruby的区别不是那么大,我们只是有很多可用的框架来输出原始的html代码,所以我们从来没有写过像puts“”这样的东西。 – Schmurfy

+1

看看Ruby的[CGI](http://rubydoc.info/stdlib/cgi/1.9.2/frames)库。它提供了访问参数,cookie等的帮助器。一旦了解了CGI规范的工作原理,创建CGI脚本即使没有库也很简单。 –

+0

你可以发布你的简单的“你好世界”示例脚本?这将有助于了解你正在尝试做什么。它是一种呈现应该在浏览器中显示的HTML的脚本吗?或者可以从命令行运行的脚本? – Andrew

回答

9

Sinatra可能是您在没有Rails的情况下从Web服务器运行Ruby脚本的最佳选择。

到这里看看:http://www.sinatrarb.com

从西纳特拉文档:

require 'sinatra' 

get '/hi' do 
    "Hello World!" 
end 

然后,只需运行:

$ gem install sinatra 
$ ruby -rubygems hi.rb 
== Sinatra has taken the stage ... 
>> Listening on 0.0.0.0:4567 

刚去http://0.0.0.0:4567在浏览器中,你应该找到你“Hello World”

...

要添加到这一点,因为你还问在Apache或其他Web服务器上运行,你可能想看看这些教程有关部署新的基于西纳特拉的应用程序到Apache或Nginx的:

阿帕奇: http://www.pastbedti.me/2009/11/deploying-a-sinatra-app-with-apache-and-phusion-passenger-a-k-a-mod_rack/http://www.giantflyingsaucer.com/blog/?p=1716

Nginx的:http://tommy.chheng.com/2009/06/09/deploying-a-sinatra-app-on-nginx-passenger-with-capistrano-and-git/

注意两个教程覆盖通孔客运运行西纳特拉 - ,这我有好运气与(http://www.modrails.com/不要被“modrails”的名字:)推迟)在Apache和Nginx下部署应用程序。

7

您可以配置Apache(例如)以CGI脚本运行.rb文件,然后在脚本顶部添加一个shebang行(#!/path/to/your/ruby#!/usr/bin/env ruby)。然而,这不是最优的,因为它会为每个请求启动一个新的解释器。

+1

这是传统的CGI,适合偶尔使用。 Ruby的[CGI](http://rubydoc.info/stdlib/cgi/1.9.2/frames)库旨在为此目的提供帮助。 –

4

运行红宝石网站的比较常用的方法是乘客:http://www.modrails.com/ 这是不安装真的很难和你使用,这里是Apache他DOC:http://www.modrails.com/documentation/Users%20guide%20Apache.html#_deploying_a_ruby_on_rails_application

您的应用程序必须是有效的机架应用,这里是一个最小的Hello World(假设/应用程序是应用程序的根文件夹):

/app/config.ru

require 'rack' 
require 'app' 
run(app) 

/app/app.rb

app = proc do |env| 
    [ 
    # http status code 
    200, 
    # headers 
    {'Content-Type' => 'text/html'}, 
    # html body 
    ["<head><title>Test Page</title></head><body>Hello World !</body>"] 
    ] 
end 

保存上述文件并创建子文件夹/应用/公众和你的Apache配置使用/应用/公众的DocumentRoot(由乘客来检测的Ruby/Rails /西纳特拉需要申请)。

这可能看起来很可怕,但这是用于生产部署,在开发过程中,您真的不想搞乱真正的服务器。

所有你需要运行上面我给config.ru文件是:

$ gem install rack 
$ rackup config.ru 

或者,如果你想成为更接近你的生产系统:

$ gem install passenger 
$ cd /app 
$ passenger start 

这将安装你的带乘客的nginx服务器并运行您的应用程序。

在大多数情况下,您绝对不会直接使用机架,而是在rails,sinatra或其他框架上使用ruby来为您生成html(它们都使用现在的机架以提供与web服务器通用的api)。

+3

它的设置太高了,特别是像我们这样的新手。我仍然不知道如何启动和运行。 –

+1

我运行“乘客启动”,并阅读“下载Nginx ...”后,我几乎生气了我的裤子。现在我有webrack,nginx和Apache。尼斯。 :D –

1

运行此。

ruby -r webrick -e "s = WEBrick::HTTPServer.new(:Port => 8000, :DocumentRoot => Dir.pwd); trap('INT') { s.shutdown }; s.start" 
-3
#!/usr/bin/env ruby //shebang line to indicate path to ruby. 
require 'cgi'  //cgi file to create a simple cgi object. 
cgi = CGI.new  //instantiating a cgi object. 
puts cgi.header //thats telling the server about the type(html). 
puts "hello"  // thats the output on the browser. 
相关问题