16 Stimmen

Erstellen einer Webseite mit Ruby ohne Rails

Ich bin auf der Suche nach einem Weg, um einfache Ruby-Code ohne Schienen zu tun. Ich komme aus der PHP-Welt, und manchmal, ich baue nur eine Seite mit einer Mysql-Verbindung, führen Sie eine Abfrage und zeigen das Ergebnis in einer einfachen Tabelle (zum Beispiel ein einfaches Protokoll oder Bericht). Beispiel:

<?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>";
}
?>

Dies ist nur ein einfaches Beispiel, spiegelt aber wider, was ich mit Ruby tun muss. Ich will nicht, dass alle Rails-Frameworks so etwas tun. Wie kann ich dies mit einfachen Ruby-Code zu erreichen?

14voto

Krule Punkte 6438

Erstens: Ruby ist nicht wie php. Man kann keine Dateien in public_html ablegen und erwarten, dass alles funktioniert.

Trotzdem ist es möglich, es auf diese Weise zu tun, irgendwie. Also wir sind mit Mysql-Adapter ohne ORM wie php standardmäßig tut.

Bevor Sie beginnen, benötigen Sie den mysql-Adapter, den Sie mit installieren:

gem install mysql2

Schreiben Sie dann etwas wie:

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>"}

Führen Sie es nun in der Konsole mit

ruby name_of_the _file.rb

Dadurch werden die Datensätze in der Konsole ausgegeben. Wenn Sie eine Browserausgabe wünschen, müssen Sie einen kleinen Server schreiben:

#!/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

Wenn Sie nun ruby application.rb Der Server wird auf Port 6789 gestartet und gibt die erforderlichen Daten aus. Sie können später einen Reverse-Proxy darauf aufsetzen und ihn auf Port 80 verwenden.

5voto

regularfry Punkte 3168

Die einfache Antwort lautet . . Oder Camping .

Die etwas längere Antwort ist jedoch, dass Ruby nicht dem gleichen Ausführungsmodell wie PHP folgt, so dass das Entwicklungsmodell von "etwas Code in eine Datei stecken, der bei jeder Anfrage vom Webserver interpoliert wird" nicht so gut unterstützt wird.

2voto

NikT Punkte 21

Der einfachste Weg, den ich kenne, ist, das CGI-Modul von Ruby zu verwenden und das Skript als CGI auszuführen. Je nach Ihren Leistungsanforderungen und der Komplexität der Seite, die Sie erstellen möchten, könnte so etwas den Zweck erfüllen:

#!/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']}" }
    }
  }
}

Sie sollten den Overhead des Verbindungsaufbaus zu MySQL bei jeder Anfrage berücksichtigen, und für komplexe Seiten benötigen Sie einen Templating-Mechanismus.

0voto

Schmurfy Punkte 1695

Das sollte die Arbeit erledigen:

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

Bevor Sie es ausführen, müssen Sie activerecord installieren:

gem install activerecord

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X