微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用没有轨道的红宝石制作网页

如何解决用没有轨道的红宝石制作网页

| 我正在寻找一种无需导轨即可执行简单的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适配器,就像p​​hp一样。 在开始之前,您将需要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 举报,一经查实,本站将立刻删除。