制作一个没有铁轨的ruby网页

我正在寻找一种方法来做没有rails的简单ruby代码。 我来自PHP世界,有时,我只是构建一个带有Mysql连接的页面,运行查询并在简单的表中显示结果(例如,简单的日志或报告)。 例:

<?php $con = mysql_connect("localhost","user","pass"); mysql_select_db("mydb"); $query = mysql_query("SELECT * FROM users"); while($data = mysql_fetch_assoc($query) { echo "

$data[name] - $data[age]

"; } ?>

这只是一个简单的例子,但反映了我需要用ruby做的事情。 我不希望所有的rails框架只是做这样的事情。 如何使用简单的ruby代码实现这一目标?

首先,Ruby不像php。 没有将文件放入public_html并期望一切正常。

从来没有这样,有可能这样做,有点。 因此我们默认使用没有ORM的Mysql适配器。

在开始之前,您将需要mysql适配器,因此请使用以下命令安装:

 gem install mysql2 

写点像:

 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 "

#{r['name']} - #{r['age']}

"}

现在在控制台中运行它

 ruby name_of_the _file.rb 

这将在控制台中输出记录。 如果您想要浏览器输出,则必须编写一个小型服务器:

 #!/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\r\nContent-type:text/html\r\n\r\n" request = session.gets records.each {|r| session.print "

#{r['name']} - #{r['age']}

"} session.close end

现在当你执行ruby application.rb ,服务器将在端口6789上启动,它将输出所需的数据。 您可以稍后在其上反向代理并在端口80上使用它。

简单的答案是sinatra 。 或露营 。

然而,稍微长一点的答案是Ruby不遵循与PHP相同的执行模型,因此“支持在每个请求上由Web服务器插入文件中的某些代码”的开发模型得不到支持。

我所知道的最简单的方法是使用Ruby的CGI模块,并将脚本作为CGI运行。 根据您的性能要求和要生成的页面的复杂性,这样的事情可能就是这样:

 #!/usr/bin/ruby require 'cgi' require 'mysql' con = Mysql.new("localhost","user","pass","mydb") rs = con.query('select * from users') cgi = CGI.new('html4') cgi.out { cgi.html { cgi.body { rs.each_hash { |row| puts #{"row['name']} - #{row['age']}" } } } } 

您可能需要考虑在每个请求上建立与MySQL的连接的开销,对于复杂的页面,您将需要一个模板机制。

这应该做的工作:

 require 'rubygems' gem 'activerecord'; require 'active_record' class User < ActiveRecord::Base end ActiveRecord::Base.establish_connection( :adapter => 'mysql', :database => 'test', :user => 'user', :password => 'pass' ) User.all.each do |u| puts "

#{u.name} - #{u.age}

" end

在运行之前,您需要安装activerecord:

 gem install activerecord