Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
307 views
in Technique[技术] by (71.8m points)

php - Making a web page with ruby without rails

I′m looking for a way to do simple ruby code without rails. I′m coming from PHP world, and sometimes, I just build a page with a Mysql connection, run a query and show result in a simple table (for example, a simple log or report). Example:

<?php
$con = mysql_connect("localhost","user","pass");
mysql_select_db("mydb");

$query = mysql_query("SELECT * FROM users");

while($data = mysql_fetch_assoc($query) {
   echo "<p> $data[name] - $data[age] </p>";
}
?>

This is just a simple example, but reflects what I need to do with ruby. I don′t want all rails framework to just do something like this. How can I achieve this with simple ruby code?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

First, Ruby is not like php. No droping files into public_html and expecting everything to work.

Never the less, it is possible to do it that way, kinda. So we are using Mysql adapter with no ORM as php does by default.

Before you start, you will need mysql adapter, so install it with:

gem install mysql2

Than write something like:

require "rubygems"
require "mysql2"

client = Mysql2::Client.new(
  :host => "127.0.0.1",
  :username => "root",
  :password => "",
  :database => "mydb"
)
records = client.query("SELECT * FROM users")

records.each {|r| p "<p>#{r['name']} - #{r['age']}</p>"}

Now run it in console with

ruby name_of_the _file.rb

This will output records in console. If you want browser output, you will have to write a small server:

#!/usr/bin/ruby
require 'rubygems'
require 'socket'
require 'mysql2'

webserver = TCPServer.new('127.0.0.1', 6789)

client = Mysql2::Client.new(
  :host => "127.0.0.1",
  :username => "root",
  :password => "",
  :database => "mydb"
)

records = client.query("SELECT * FROM users")

while (session = webserver.accept)
   session.print "HTTP/1.1 200/OK
Content-type:text/html

"
   request = session.gets
   records.each {|r| session.print "<p>#{r['name']} - #{r['age']}</p>"}
   session.close
 end

Now when you do ruby application.rb, server will be started on port 6789 and it will output required data. You can later reverse proxy on it and use it on port 80.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...