Создание веб-страницы с рубином без рельсов

Я ищу способ сделать простой рубиновый код без рельсов. Я прихожу из мира 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 нет файлов и ожидать, что все будет работать.

Тем не менее, это можно сделать так, любопытно. Таким образом, мы используем Mysql-адаптер без ORM по умолчанию 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

Теперь, когда вы выполните ruby application.rb, сервер будет запущен на порту 6789 и он выведет необходимые данные. Вы можете позже отменить прокси-сервер и использовать его на порту 80.

Ответ 2

Простой ответ sinatra. Или camping.

Однако немного более длинный ответ заключается в том, что Ruby не соответствует той же модели выполнения, что и PHP, поэтому модель разработки "привязать некоторый код в файле, который будет интерполировать веб-сервер по каждому запросу", не так хорошо поддерживается.

Ответ 3

Самый простой способ, которым я знаю, - использовать Ruby CGI module и запустить script как 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 по каждому запросу, а для сложных страниц вам потребуется механизм шаблонов.

Ответ 4

Это должно сделать работу:

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