使用没有导轨的 ruby 制作网页

2022-08-31 01:03:04

我正在寻找一种在没有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 "<p> $data[name] - $data[age] </p>";
}
?>

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


答案 1

首先,Ruby不像php。无需将文件拖放到public_html并期望一切正常。

永远不会少,有可能这样做,有点。因此,我们使用的是没有ORM的Mysql适配器,就像php默认所做的那样。

在开始之前,您将需要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 "<p>#{r['name']} - #{r['age']}</p>"}

现在在控制台中运行它

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 "<p>#{r['name']} - #{r['age']}</p>"}
   session.close
 end

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


答案 2

简单的答案是辛纳屈。或露营

然而,稍微长一点的答案是Ruby不遵循与PHP相同的执行模型,因此“将一些代码粘贴到文件中,以便Web服务器在每个请求上进行插值”的开发模型没有得到很好的支持。


推荐