如何解决用没有轨道的红宝石制作网页
| 我正在寻找一种无需导轨即可执行简单的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>\";
}
?>
这只是一个简单的示例,但反映了我需要对红宝石进行的操作。我不希望所有的Rails框架都做这样的事情。如何使用简单的ruby代码实现这一目标?
解决方法
首先,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\",: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
现在,当您执行“ 5”时,服务器将在端口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 \"<p>#{u.name} - #{u.age}</p>\"
end
在运行它之前,您需要安装activerecord:
gem install activerecord
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。