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