2011-04-14 12 views
15

मैं रेल के बिना सरल रूबी कोड करने का एक तरीका ढूंढ रहा हूं। मैं 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>"; 
} 
?> 

यह सिर्फ एक सरल उदाहरण है, लेकिन दर्शाता है मैं रूबी के साथ क्या करने की जरूरत। मैं इस तरह कुछ ऐसा करने के लिए सभी रेल ढांचे को नहीं चाहता हूं। मैं सरल रूबी कोड के साथ इसे कैसे प्राप्त कर सकता हूं?

+2

कृपया मेरे और किसी और के ओसीडी का इलाज करें; आप स्थानीयहोस्ट के बाद दोहरे उद्धरण भूल गए। – Zirak

+0

@ ज़ीरक, आप इस तरह की चीजों को ठीक करने के लिए किसी और के प्रश्न को संपादित कर सकते हैं। रूपरेखा के बिना –

उत्तर

13

पहले, रूबी php जैसा नहीं है:

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 की जरूरत है। Public_html में कोई ड्रॉपिंग फ़ाइलें नहीं और सब कुछ काम करने की उम्मीद है।

कभी भी कम नहीं, ऐसा करना संभव है, थोड़े। तो हम डिफ़ॉल्ट रूप से php के रूप में कोई ओआरएम के साथ MySQL एडाप्टर का उपयोग कर रहे हैं।

शुरू करने से पहले, आप mysql एडाप्टर की आवश्यकता होगी, तो साथ इसे स्थापित:

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 
साथ कंसोल में इसे चलाने: की तरह कुछ लिखने

gem install mysql2 

से

यह कंसोल में आउटपुट रिकॉर्ड करेगा। आप ब्राउज़र उत्पादन चाहते हैं, आप एक छोटे से सर्वर लिखने के लिए करना होगा:

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

5

सरल उत्तर sinatra है। या camping

हालांकि, थोड़ा लंबा जवाब यह है कि रूबी PHP के समान निष्पादन मॉडल का पालन नहीं करता है, इसलिए "प्रत्येक अनुरोध पर वेब सर्वर द्वारा एक फ़ाइल में कुछ कोड चिपकाने के लिए" मॉडल का विकास मॉडल नहीं है साथ ही समर्थित है।

+0

... – rizidoro

+1

"रेल के बिना" "रूपरेखा के बिना!" नहीं है फिर भी, आप केवल वेबब्रिक के साथ एक लंबा सफर तय कर सकते हैं: http: //www.igvita।कॉम/2007/02/13/बिल्डिंग-डायनामिक-वेब्रिक-सर्वर-इन-रूबी/ – regularfry

0

यह काम करना चाहिए:

gem install activerecord 
+3

@ एरिजिडोरो शायद आपको यह बताना चाहिए कि आपकी बाधाएं क्या हैं, उदा। ऐसा लगता है कि आप पैसेंजर का उपयोग करना चाहते हैं, इसलिए आपको इसका उल्लेख करना चाहिए। इससे लोगों को आपके इच्छित चीजों के करीब जवाब देने में मदद मिलती है। – Kelvin

2

पर यह सबसे आसान तरीका है मैं रूबी के सीजीआई मॉड्यूल का उपयोग करने के लिए है के बारे में पता उपयोग करें, और सीजीआई के रूप में स्क्रिप्ट चलाने। अपने प्रदर्शन की आवश्यकताओं और पेज आप उत्पन्न करना चाहते हैं की जटिलता पर निर्भर करता है, कुछ इस तरह यह काम कर सकता है:

#!/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 करने के लिए कनेक्शन की स्थापना की भूमि के ऊपर पर विचार करना चाहते हैं, और जटिल के लिए पृष्ठों को आपको एक टेम्पलेटिंग तंत्र की आवश्यकता होगी।

संबंधित मुद्दे