From: Useko Netsumi Date: 2004-01-06T14:21:44+09:00 Subject: Re: Simple Ruby DB apps/programs ... Ara.T.Howard wrote: > On Mon, 5 Jan 2004, Useko Netsumi wrote: > > >>Date: Mon, 05 Jan 2004 19:25:27 -0500 >>From: Useko Netsumi >>Reply-To: usenets_remove_this@yahoo.com >>Newsgroups: comp.lang.ruby >>Subject: Re: Simple Ruby DB apps/programs ... >> >>Carl Youngblood wrote: >> >>>Useko Netsumi wrote: >>> >>> >>>>I was wondering if there are some example of small Ruby(1.8.1) >>>>Database Apps/Programs. Preferably using Relational Database such as >>>>MySQL(4 or 5) or Oracle. >>>> >>>>I'd love to see some example of storing name(first,last), >>>>address(addr1,addr2,city,zip),phone(home,work,mobile), and a photo image. >>>> >>>>It took me a while to write it in PHP but perhaps I can do it in Ruby >>>>more cleanly while learning this great language. >>>> >>>>Thanks >>>> >>>>/useko >>>> >>> >>>My favorite DBMS for small client apps is sqlite. No other DB comes >>>close to it in terms of convenience and speed, as long as you're not >>>running a distributed type of an application with hundreds of clients >>>accessing the database at once. There is no need for a database server >>>at all. All necessary code for accessing the database is compiled in, >>>and databases are just plain old files. And it is ACID-compliant. Check >>>out this ruby extension for it here: >>> >>>http://sqlite-ruby.sourceforge.net/ >>> >>>Carl >>> >> >>Thanks to all. >> >>Perhaps y'all can give me some advice. My apps are running a web photo >>apps with mutiple tables in the database. I do not store the image in >>the DB but just the /image/file/path and other textual information such >>as location, date, time, who took the pictures, and comment fields. >>User(s) can only browse, search, and list the information for now. And, >>I do not expect more than 20 users accessing it at any given time. Will >>it work with SQLITE? Or do I need MySQL or more advanced(more expensive) >>RDBMS to handle those tasks. >> >>Thanks >> >>/useko >> > > > i use pstore for alot of web stuff - it works fine: > > ~/eg/ruby > cat photo.rb > require 'pstore' > > class DB > def initialize path = 'photo.db' > @pstore = PStore.new path > end > def []= name, record > address, phone = record > > @pstore.transaction do > @pstore[name] = [address, phone] > end > end > def [] name > @pstore.transaction(read_only = true){ @pstore[name] } > end > def each(&block) > @pstore.transaction do > @pstore.roots.each{|name| block.call(name, @pstore[name])} > end > end > def << record > first,last,addr1,addr2,city,zip,home,work,mobile = record > name = Name[first, last] > address = Address[addr1,addr2,city,zip] > phone = Phone[home,work,mobile] > self[name] = [address, phone] > end > > Name = Struct.new "Name", :first, :last > Address = Struct.new "Address", :addr1, :addr2, :city, :zip > Phone = Struct.new "Phone", :home, :work, :mobile > > [Name, Address, Phone].each{|c| class << c; alias [] new; end} > end > > if $0 == __FILE__ > db = DB.new > > records = [ > %w(john doe foo bar boulder 80304 1 2 3), > %w(jane doe bar foo boulder 80305 3 2 1), > ] > > records.each{|record| db << record} > > john = DB::Name['john', 'doe'] > jane = DB::Name['jane', 'doe'] > > db.each do |name, address, phone| > printf "name: %s\naddress: %s\nphone: %s\n\n", > name.inspect, address.inspect, phone.inspect > end > > p db[john] > p db[jane] > end > > > ~/eg/ruby > ruby photo.rb > > name: # > address: [#, #] > phone: nil > > name: # > address: [#, #] > phone: nil > > [#, #] > [#, #] > > > you can obviously just store the path to the photo this way... the thing with > pstore is that you can tailor the object to meet your needs: perhaps a hash > would be better: it's up to you. also check out madeleine (on RAA) for this > purpose. > > > -a Thanks Ara, I'll definitely will try your example above. And check out madeline as well. One question though, have you tried the pstore for multi-user or this is mainly for single user only? What happen if 2 or more user accessing the same db at the same time? Thanks /useko