How to run a simple ruby script in any web server

2019-03-14 11:24发布

It seems very funny to me that when I search something related ruby, all ruby on rails related results popped up. So nobody using raw ruby anymore?

However, I am new to ruby. This morning I was only trying to run a simple hello world ruby script in web server, firstly apache 2 and then tried the mongrel. But unfortunately I failed. I googled every way I can, but result only shows regarding ruby on rails. So really is there any way to run a ruby script in any web server, or I have to use ror even if I just want to do a hello world application?

7条回答
手持菜刀,她持情操
2楼-- · 2019-03-14 11:48

Run this from your app root.

ruby -r webrick -e "s = WEBrick::HTTPServer.new(:Port => 8000, :DocumentRoot => Dir.pwd); trap('INT') { s.shutdown }; s.start"
查看更多
闹够了就滚
3楼-- · 2019-03-14 11:54

Ruby 1.9.2+ simple command.

ruby -run -e httpd . -p 5000

from this article http://til.justincampbell.me/start-an-http-server-with-ruby-run/ other article https://gist.github.com/willurd/5720255

查看更多
再贱就再见
4楼-- · 2019-03-14 12:00

The more commonly used way of running a ruby website is passenger: http://www.modrails.com/ It is not really hard to install and you use, here is he doc for apache: http://www.modrails.com/documentation/Users%20guide%20Apache.html#_deploying_a_ruby_on_rails_application

Your application must be a valid rack application, here is a minimal hello world (let's say /app is your application's root folder):

/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

Save the files above and create a subfolder /app/public (required by passenger to detect a ruby/rails/sinatra application) and use /app/public as DocumentRoot in your apache config.

This may look scary but this is for production deployment, in development your really don't want to mess with a real server.

All you need to run the config.ru file I gave above is:

$ gem install rack
$ rackup config.ru

Or if you want to be closer to your production system:

$ gem install passenger
$ cd /app
$ passenger start

which will install you an nginx server with passenger and run your application.

In most case you will never use rack directly but instead use ruby on rails, sinatra or another framework to generate the html for you (they all use rack below now to provide a common api with the webservers).

查看更多
Lonely孤独者°
5楼-- · 2019-03-14 12:02
#!/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.
查看更多
狗以群分
6楼-- · 2019-03-14 12:03

You could configure Apache (for example) to run .rb files as CGI scripts, and then add a shebang line (#!/path/to/your/ruby or maybe #!/usr/bin/env ruby) at the top of the script. It's not optimal, though, as it'd start a new interpreter for each request.

查看更多
该账号已被封号
7楼-- · 2019-03-14 12:03

I've heard mod_ruby is good. Unlike, #!/path/to/your/ruby, mod_ruby won't spawn a new ruby interpreter.

https://github.com/shugo/mod_ruby

查看更多
登录 后发表回答