[{"data":1,"prerenderedAt":1079},["ShallowReactive",2],{"blog:2007:getting-started-with-ruby-on-rails-on-mac-os-x":3,"blogMore-Development":941,"comments-getting-started-with-ruby-on-rails-on-mac-os-x":954},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"category":11,"tags":12,"excerpt":16,"body":44,"_type":932,"_id":933,"_source":934,"_file":935,"_stem":936,"_extension":937,"url":938,"wordCount":939,"minutes":940,"commentCount":940},"/blog/2007/getting-started-with-ruby-on-rails-on-mac-os-x","2007",false,"en","Getting started with Ruby on Rails on Mac OS X","","2007-07-09T00:48:45+00:00","Development",[13,14,15],"Apple","macOS","SQL",{"type":17,"children":18},"root",[19,31],{"type":20,"tag":21,"props":22,"children":23},"element","p",{},[24,27,29],{"type":25,"value":26},"text","I have decided to get to grips with ",{"type":25,"value":28},"Ruby on Rails",{"type":25,"value":30}," and get it set-up on my MacBook Pro. There seem to be a variety of options available:",{"type":20,"tag":21,"props":32,"children":33},{},[34,36,38,40,42],{"type":25,"value":35},"As ",{"type":25,"value":37},"Scott Stevenson points out",{"type":25,"value":39}," this is too many options for a system that is described as ",{"type":25,"value":41},"Convention over configuration",{"type":25,"value":43},".",{"type":17,"children":45,"toc":916},[46,53,66,122,140,153,159,180,190,195,203,208,214,219,227,233,238,246,252,284,290,303,311,329,335,346,354,359,367,377,391,397,402,408,413,426,452,458,471,510,516,527,535,545,551,582,607,618,732,762,773,822,833,841,857,863,903,908],{"type":20,"tag":47,"props":48,"children":50},"h2",{"id":49},"choosing-your-ruby-packages",[51],{"type":25,"value":52},"Choosing your Ruby packages",{"type":20,"tag":21,"props":54,"children":55},{},[56,57,65],{"type":25,"value":26},{"type":20,"tag":58,"props":59,"children":63},"a",{"href":60,"rel":61},"https://www.rubyonrails.org",[62],"nofollow",[64],{"type":25,"value":28},{"type":25,"value":30},{"type":20,"tag":67,"props":68,"children":69},"ol",{},[70,85,99,111],{"type":20,"tag":71,"props":72,"children":73},"li",{},[74,76,83],{"type":25,"value":75},"Use ",{"type":20,"tag":58,"props":77,"children":80},{"href":78,"rel":79},"https://locomotive.raaum.org",[62],[81],{"type":25,"value":82},"Locomotive",{"type":25,"value":84},": an all-in-one standalone developer package",{"type":20,"tag":71,"props":86,"children":87},{},[88,90,97],{"type":25,"value":89},"Official ",{"type":20,"tag":58,"props":91,"children":94},{"href":92,"rel":93},"https://developer.apple.com/tools/rubyonrails.html",[62],[95],{"type":25,"value":96},"sources",{"type":25,"value":98},": configure, compile and install each",{"type":20,"tag":71,"props":100,"children":101},{},[102,109],{"type":20,"tag":58,"props":103,"children":106},{"href":104,"rel":105},"https://www.robbyonrails.com/articles/2007/06/19/installing-ruby-on-rails-and-postgresql-on-os-x-second-edition",[62],[107],{"type":25,"value":108},"MacPorts",{"type":25,"value":110},": package management for free software",{"type":20,"tag":71,"props":112,"children":113},{},[114,121],{"type":20,"tag":58,"props":115,"children":118},{"href":116,"rel":117},"https://finkproject.org",[62],[119],{"type":25,"value":120},"Fink",{"type":25,"value":110},{"type":20,"tag":21,"props":123,"children":124},{},[125,126,132,133,139],{"type":25,"value":35},{"type":20,"tag":58,"props":127,"children":130},{"href":128,"rel":129},"https://theocacao.com/document.page/321",[62],[131],{"type":25,"value":37},{"type":25,"value":39},{"type":20,"tag":58,"props":134,"children":137},{"href":135,"rel":136},"https://en.wikipedia.org/wiki/Ruby_on_Rails",[62],[138],{"type":25,"value":41},{"type":25,"value":43},{"type":20,"tag":21,"props":141,"children":142},{},[143,145,152],{"type":25,"value":144},"As I already use Fink for installing the majority of free software on my Mac I decided I’d go with that. At least until ",{"type":20,"tag":58,"props":146,"children":149},{"href":147,"rel":148},"https://weblog.rubyonrails.org/2006/8/7/ruby-on-rails-will-ship-with-os-x-10-5-leopard",[62],[150],{"type":25,"value":151},"Leopard ships with Ruby on Rails in-the-box",{"type":25,"value":43},{"type":20,"tag":47,"props":154,"children":156},{"id":155},"preparing-fink",[157],{"type":25,"value":158},"Preparing Fink",{"type":20,"tag":21,"props":160,"children":161},{},[162,169,171,178],{"type":20,"tag":58,"props":163,"children":166},{"href":164,"rel":165},"https://www.gringod.com",[62],[167],{"type":25,"value":168},"GrinGod",{"type":25,"value":170}," gave me a heads-up that we’ll need to turn on the unstable packages to get the gems package and latest version of Ruby. The details are in the ",{"type":20,"tag":58,"props":172,"children":175},{"href":173,"rel":174},"https://finkproject.org/faq/usage-fink.php",[62],[176],{"type":25,"value":177},"Fink FAQ",{"type":25,"value":179}," but in summary:",{"type":20,"tag":181,"props":182,"children":184},"pre",{"code":183},"fink configure\n",[185],{"type":20,"tag":186,"props":187,"children":188},"code",{"__ignoreMap":9},[189],{"type":25,"value":183},{"type":20,"tag":21,"props":191,"children":192},{},[193],{"type":25,"value":194},"And choose the option for unstable trees. Then type:",{"type":20,"tag":181,"props":196,"children":198},{"code":197},"fink selfupdate\nfink index\nfink scanpackages\n",[199],{"type":20,"tag":186,"props":200,"children":201},{"__ignoreMap":9},[202],{"type":25,"value":197},{"type":20,"tag":21,"props":204,"children":205},{},[206],{"type":25,"value":207},"And make sure you have rsync or cvs updating turned on to get the descriptions.",{"type":20,"tag":47,"props":209,"children":211},{"id":210},"ruby-via-fink",[212],{"type":25,"value":213},"Ruby (via Fink)",{"type":20,"tag":21,"props":215,"children":216},{},[217],{"type":25,"value":218},"Ruby is the language we wish to use and Fink currently supports 1.6 and 1.8 The following commands will install 1.8 for us and the Ruby Gems package management system:",{"type":20,"tag":181,"props":220,"children":222},{"code":221},"fink install ruby\nfink install rubygems-rb18\n",[223],{"type":20,"tag":186,"props":224,"children":225},{"__ignoreMap":9},[226],{"type":25,"value":221},{"type":20,"tag":47,"props":228,"children":230},{"id":229},"rails-via-gem",[231],{"type":25,"value":232},"Rails (via Gem)",{"type":20,"tag":21,"props":234,"children":235},{},[236],{"type":25,"value":237},"Now we need the Rails web framework which will be installed using gem.",{"type":20,"tag":181,"props":239,"children":241},{"code":240},"gem install rails --include-dependencies\n",[242],{"type":20,"tag":186,"props":243,"children":244},{"__ignoreMap":9},[245],{"type":25,"value":240},{"type":20,"tag":47,"props":247,"children":249},{"id":248},"choosing-your-web-server",[250],{"type":25,"value":251},"Choosing your web server",{"type":20,"tag":21,"props":253,"children":254},{},[255,257,264,266,273,275,282],{"type":25,"value":256},"There are a number of options available again here including ",{"type":20,"tag":58,"props":258,"children":261},{"href":259,"rel":260},"https://httpd.apache.org",[62],[262],{"type":25,"value":263},"Apache",{"type":25,"value":265},", ",{"type":20,"tag":58,"props":267,"children":270},{"href":268,"rel":269},"https://www.lighttpd.net",[62],[271],{"type":25,"value":272},"LightTPD",{"type":25,"value":274}," and ",{"type":20,"tag":58,"props":276,"children":279},{"href":277,"rel":278},"https://github.com/mongrel/mongrel",[62],[280],{"type":25,"value":281},"Mongrel",{"type":25,"value":283},". I wanted to give LightTPD a shot as it is on Fink and less of a beast than Apache. I tried various combinations but even having installed the lighttpd-fastcgi module I couldn’t get the fastcgi gem to do anything but spew errors so Mongrel it is.",{"type":20,"tag":47,"props":285,"children":287},{"id":286},"mongrel-via-gem",[288],{"type":25,"value":289},"Mongrel (via Gem)",{"type":20,"tag":21,"props":291,"children":292},{},[293,295,301],{"type":25,"value":294},"Back at that ",{"type":20,"tag":296,"props":297,"children":298},"em",{},[299],{"type":25,"value":300},"Terminal",{"type":25,"value":302}," window type:",{"type":20,"tag":181,"props":304,"children":306},{"code":305},"sudo gem install mongrel --include-dependencies\n",[307],{"type":20,"tag":186,"props":308,"children":309},{"__ignoreMap":9},[310],{"type":25,"value":305},{"type":20,"tag":21,"props":312,"children":313},{},[314,316,321,322,327],{"type":25,"value":315},"Select the ",{"type":20,"tag":296,"props":317,"children":318},{},[319],{"type":25,"value":320},"mongrel 1.0.1 (ruby)",{"type":25,"value":274},{"type":20,"tag":296,"props":323,"children":324},{},[325],{"type":25,"value":326},"fastthread 1.0 (ruby)",{"type":25,"value":328}," options as prompted.",{"type":20,"tag":47,"props":330,"children":332},{"id":331},"testing-ruby-rails-mongrel",[333],{"type":25,"value":334},"Testing Ruby, Rails & Mongrel",{"type":20,"tag":21,"props":336,"children":337},{},[338,340,344],{"type":25,"value":339},"Again at the ",{"type":20,"tag":296,"props":341,"children":342},{},[343],{"type":25,"value":300},{"type":25,"value":345}," window:",{"type":20,"tag":181,"props":347,"children":349},{"code":348},"rails mytest\n",[350],{"type":20,"tag":186,"props":351,"children":352},{"__ignoreMap":9},[353],{"type":25,"value":348},{"type":20,"tag":21,"props":355,"children":356},{},[357],{"type":25,"value":358},"A number of files should be created if Ruby & Rails are working correctly. Now type:",{"type":20,"tag":181,"props":360,"children":362},{"code":361},"cd mytest\nscript/server\n",[363],{"type":20,"tag":186,"props":364,"children":365},{"__ignoreMap":9},[366],{"type":25,"value":361},{"type":20,"tag":21,"props":368,"children":369},{},[370,372],{"type":25,"value":371},"You should see a line stating ",{"type":20,"tag":296,"props":373,"children":374},{},[375],{"type":25,"value":376},"Starting Mongrel listening at 0.0.0.0:3000",{"type":20,"tag":21,"props":378,"children":379},{},[380,382],{"type":25,"value":381},"Open your browser of choice and navigate to ",{"type":20,"tag":296,"props":383,"children":384},{},[385],{"type":20,"tag":58,"props":386,"children":389},{"href":387,"rel":388},"http://localhost:3000",[62],[390],{"type":25,"value":387},{"type":20,"tag":47,"props":392,"children":394},{"id":393},"choosing-a-database",[395],{"type":25,"value":396},"Choosing a database",{"type":20,"tag":21,"props":398,"children":399},{},[400],{"type":25,"value":401},"You can go with MySQL, PostgreSQL or SQLite from Fink alone. I went with MySQL for a change.",{"type":20,"tag":47,"props":403,"children":405},{"id":404},"mysql-50",[406],{"type":25,"value":407},"MySQL 5.0",{"type":20,"tag":21,"props":409,"children":410},{},[411],{"type":25,"value":412},"While Mac OS X Server comes with MySQL the standard edition does not. Rather than use the Fink port I went with the official MySQL 5.0 package primarily to get the preferences pane that allows me to start and stop it as required however it also includes a helpful monitoring widget.",{"type":20,"tag":21,"props":414,"children":415},{},[416,418,425],{"type":25,"value":417},"To install ",{"type":20,"tag":58,"props":419,"children":422},{"href":420,"rel":421},"https://dev.mysql.com/downloads/mysql/5.0.html#downloads",[62],[423],{"type":25,"value":424},"download and run the MySQL…x86 package",{"type":25,"value":43},{"type":20,"tag":21,"props":427,"children":428},{},[429,431,436,438,443,445,450],{"type":25,"value":430},"Copy ",{"type":20,"tag":296,"props":432,"children":433},{},[434],{"type":25,"value":435},"MySQL.prefPane",{"type":25,"value":437}," to ",{"type":20,"tag":296,"props":439,"children":440},{},[441],{"type":25,"value":442},"/Library/PreferencePanes",{"type":25,"value":444}," and re-open ",{"type":20,"tag":296,"props":446,"children":447},{},[448],{"type":25,"value":449},"System Preferences",{"type":25,"value":451},". Head into the new MySQL pane and start MySQL up.",{"type":20,"tag":47,"props":453,"children":455},{"id":454},"mysql-tools",[456],{"type":25,"value":457},"MySQL Tools",{"type":20,"tag":21,"props":459,"children":460},{},[461,463,470],{"type":25,"value":462},"To manage MySQL and download the Mac OS X version of the ",{"type":20,"tag":58,"props":464,"children":467},{"href":465,"rel":466},"https://dev.mysql.com/downloads/gui-tools/5.0.html",[62],[468],{"type":25,"value":469},"GUI management tool",{"type":25,"value":43},{"type":20,"tag":21,"props":472,"children":473},{},[474,476,481,483,488,490,495,497,501,503,508],{"type":25,"value":475},"Run the ",{"type":20,"tag":296,"props":477,"children":478},{},[479],{"type":25,"value":480},"MySQL Administrator",{"type":25,"value":482}," application and connect to ",{"type":20,"tag":296,"props":484,"children":485},{},[486],{"type":25,"value":487},"localhost",{"type":25,"value":489}," on the default port of ",{"type":20,"tag":296,"props":491,"children":492},{},[493],{"type":25,"value":494},"3306",{"type":25,"value":496}," with the user name ",{"type":20,"tag":296,"props":498,"children":499},{},[500],{"type":25,"value":17},{"type":25,"value":502}," and a blank password. Don’t forget to change the password by heading over to the ",{"type":20,"tag":296,"props":504,"children":505},{},[506],{"type":25,"value":507},"Account",{"type":25,"value":509}," pane.",{"type":20,"tag":47,"props":511,"children":513},{"id":512},"ruby-with-mysql",[514],{"type":25,"value":515},"Ruby with MySQL",{"type":20,"tag":21,"props":517,"children":518},{},[519,521,525],{"type":25,"value":520},"Install the native Ruby to MySQL library to improve db performance by heading back to the ",{"type":20,"tag":296,"props":522,"children":523},{},[524],{"type":25,"value":300},{"type":25,"value":526}," window and executing:",{"type":20,"tag":181,"props":528,"children":530},{"code":529},"sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config\n",[531],{"type":20,"tag":186,"props":532,"children":533},{"__ignoreMap":9},[534],{"type":25,"value":529},{"type":20,"tag":21,"props":536,"children":537},{},[538,540],{"type":25,"value":539},"Select the option for ",{"type":20,"tag":296,"props":541,"children":542},{},[543],{"type":25,"value":544},"mysql 2.7 (ruby)",{"type":20,"tag":47,"props":546,"children":548},{"id":547},"testing-the-database",[549],{"type":25,"value":550},"Testing the database",{"type":20,"tag":21,"props":552,"children":553},{},[554,556,560,562,567,569,574,576,581],{"type":25,"value":555},"As MySQL doesn’t include a sample database head into ",{"type":20,"tag":296,"props":557,"children":558},{},[559],{"type":25,"value":480},{"type":25,"value":561}," and into the ",{"type":20,"tag":296,"props":563,"children":564},{},[565],{"type":25,"value":566},"Catalogs",{"type":25,"value":568}," pane. Create a new database by pressing the ",{"type":20,"tag":296,"props":570,"children":571},{},[572],{"type":25,"value":573},"+",{"type":25,"value":575}," button and giving it the name ",{"type":20,"tag":296,"props":577,"children":578},{},[579],{"type":25,"value":580},"mytest",{"type":25,"value":43},{"type":20,"tag":21,"props":583,"children":584},{},[585,587,591,593,598,600,605],{"type":25,"value":586},"Select ",{"type":20,"tag":296,"props":588,"children":589},{},[590],{"type":25,"value":580},{"type":25,"value":592}," from the left then choose ",{"type":20,"tag":296,"props":594,"children":595},{},[596],{"type":25,"value":597},"Create Table…",{"type":25,"value":599}," from the ",{"type":20,"tag":296,"props":601,"children":602},{},[603],{"type":25,"value":604},"Table Actions",{"type":25,"value":606}," drop-down list.",{"type":20,"tag":21,"props":608,"children":609},{},[610,612,616],{"type":25,"value":611},"Enter the table name products then use the ",{"type":20,"tag":296,"props":613,"children":614},{},[615],{"type":25,"value":573},{"type":25,"value":617}," button to create the following columns:",{"type":20,"tag":619,"props":620,"children":621},"table",{},[622,624],{"type":25,"value":623},"\n  ",{"type":20,"tag":625,"props":626,"children":627},"tbody",{},[628,665,666,700,701],{"type":20,"tag":629,"props":630,"children":631},"tr",{},[632,634,640,641,646,647,652,653,658,659,664],{"type":25,"value":633},"\n    ",{"type":20,"tag":635,"props":636,"children":637},"th",{},[638],{"type":25,"value":639},"\n      Name\n    ",{"type":25,"value":633},{"type":20,"tag":635,"props":642,"children":643},{},[644],{"type":25,"value":645},"\n      Type\n    ",{"type":25,"value":633},{"type":20,"tag":635,"props":648,"children":649},{},[650],{"type":25,"value":651},"\n      Primary Key?\n    ",{"type":25,"value":633},{"type":20,"tag":635,"props":654,"children":655},{},[656],{"type":25,"value":657},"\n      Nullable?\n    ",{"type":25,"value":633},{"type":20,"tag":635,"props":660,"children":661},{},[662],{"type":25,"value":663},"\n      Auto Increment?\n    ",{"type":25,"value":623},{"type":25,"value":623},{"type":20,"tag":629,"props":667,"children":668},{},[669,670,676,677,682,683,688,689,694,695,699],{"type":25,"value":633},{"type":20,"tag":671,"props":672,"children":673},"td",{},[674],{"type":25,"value":675},"\n      id\n    ",{"type":25,"value":633},{"type":20,"tag":671,"props":678,"children":679},{},[680],{"type":25,"value":681},"\n      INT\n    ",{"type":25,"value":633},{"type":20,"tag":671,"props":684,"children":685},{},[686],{"type":25,"value":687},"\n      Y\n    ",{"type":25,"value":633},{"type":20,"tag":671,"props":690,"children":691},{},[692],{"type":25,"value":693},"\n      N\n    ",{"type":25,"value":633},{"type":20,"tag":671,"props":696,"children":697},{},[698],{"type":25,"value":687},{"type":25,"value":623},{"type":25,"value":623},{"type":20,"tag":629,"props":702,"children":703},{},[704,705,710,711,716,717,721,722,726,727,731],{"type":25,"value":633},{"type":20,"tag":671,"props":706,"children":707},{},[708],{"type":25,"value":709},"\n      name\n    ",{"type":25,"value":633},{"type":20,"tag":671,"props":712,"children":713},{},[714],{"type":25,"value":715},"\n      VARCHAR(255)\n    ",{"type":25,"value":633},{"type":20,"tag":671,"props":718,"children":719},{},[720],{"type":25,"value":693},{"type":25,"value":633},{"type":20,"tag":671,"props":723,"children":724},{},[725],{"type":25,"value":693},{"type":25,"value":633},{"type":20,"tag":671,"props":728,"children":729},{},[730],{"type":25,"value":693},{"type":25,"value":623},{"type":20,"tag":21,"props":733,"children":734},{},[735,737,742,743,748,749,754,756,761],{"type":25,"value":736},"Click ",{"type":20,"tag":296,"props":738,"children":739},{},[740],{"type":25,"value":741},"Apply",{"type":25,"value":265},{"type":20,"tag":296,"props":744,"children":745},{},[746],{"type":25,"value":747},"Execute",{"type":25,"value":265},{"type":20,"tag":296,"props":750,"children":751},{},[752],{"type":25,"value":753},"OK",{"type":25,"value":755}," then ",{"type":20,"tag":296,"props":757,"children":758},{},[759],{"type":25,"value":760},"Close",{"type":25,"value":43},{"type":20,"tag":21,"props":763,"children":764},{},[765,767,771],{"type":25,"value":766},"Go to the ",{"type":20,"tag":296,"props":768,"children":769},{},[770],{"type":25,"value":300},{"type":25,"value":772}," window and cd into the mytest folder you generated earlier.",{"type":20,"tag":21,"props":774,"children":775},{},[776,778,783,785,790,792,797,799,804,805,809,811,815,817,821],{"type":25,"value":777},"Edit the ",{"type":20,"tag":296,"props":779,"children":780},{},[781],{"type":25,"value":782},"config/database.yml",{"type":25,"value":784}," file using ",{"type":20,"tag":296,"props":786,"children":787},{},[788],{"type":25,"value":789},"nano",{"type":25,"value":791}," or ",{"type":20,"tag":296,"props":793,"children":794},{},[795],{"type":25,"value":796},"TextEdit",{"type":25,"value":798}," and change the database name from ",{"type":20,"tag":296,"props":800,"children":801},{},[802],{"type":25,"value":803},"mytest_development",{"type":25,"value":437},{"type":20,"tag":296,"props":806,"children":807},{},[808],{"type":25,"value":580},{"type":25,"value":810},". You will also need to enter the password here, either for your ",{"type":20,"tag":296,"props":812,"children":813},{},[814],{"type":25,"value":17},{"type":25,"value":816}," account or ideally a special application-specific account you set-up in ",{"type":20,"tag":296,"props":818,"children":819},{},[820],{"type":25,"value":480},{"type":25,"value":43},{"type":20,"tag":21,"props":823,"children":824},{},[825,827,831],{"type":25,"value":826},"Back at the trusty ",{"type":20,"tag":296,"props":828,"children":829},{},[830],{"type":25,"value":300},{"type":25,"value":832}," execute:",{"type":20,"tag":181,"props":834,"children":836},{"code":835},"script/generate scaffold product\nscript/server\n",[837],{"type":20,"tag":186,"props":838,"children":839},{"__ignoreMap":9},[840],{"type":25,"value":835},{"type":20,"tag":21,"props":842,"children":843},{},[844,846,855],{"type":25,"value":845},"Now open your browser to ",{"type":20,"tag":296,"props":847,"children":848},{},[849],{"type":20,"tag":58,"props":850,"children":853},{"href":851,"rel":852},"http://localhost:3000/products/",[62],[854],{"type":25,"value":851},{"type":25,"value":856}," and try creating, editing and deleting some products.",{"type":20,"tag":47,"props":858,"children":860},{"id":859},"next-steps",[861],{"type":25,"value":862},"Next steps",{"type":20,"tag":864,"props":865,"children":866},"ul",{},[867,879,891],{"type":20,"tag":71,"props":868,"children":869},{},[870,872],{"type":25,"value":871},"Watch these great ",{"type":20,"tag":58,"props":873,"children":876},{"href":874,"rel":875},"https://www.rubyonrails.org/screencasts",[62],[877],{"type":25,"value":878},"Rails screencasts",{"type":20,"tag":71,"props":880,"children":881},{},[882,884],{"type":25,"value":883},"Run through some of these ",{"type":20,"tag":58,"props":885,"children":888},{"href":886,"rel":887},"https://www.digitalmediaminute.com/article/1816/top-ruby-on-rails-tutorials",[62],[889],{"type":25,"value":890},"12 tutorials",{"type":20,"tag":71,"props":892,"children":893},{},[894,896],{"type":25,"value":895},"Read the ",{"type":20,"tag":58,"props":897,"children":900},{"href":898,"rel":899},"https://www.amazon.com/Agile-Development-Rails-Pragmatic-Programmers/dp/0977616630/",[62],[901],{"type":25,"value":902},"Agile Web Development with Rails book",{"type":20,"tag":21,"props":904,"children":905},{},[906],{"type":25,"value":907},"And of course trying to find an editor/IDE that supports Ruby as Xcode certainly doesn’t and TextMate costs money (I’m happy to pay for things when I’m committed to the tech, not before)",{"type":20,"tag":21,"props":909,"children":910},{},[911],{"type":20,"tag":296,"props":912,"children":913},{},[914],{"type":25,"value":915},"[)amien",{"title":9,"searchDepth":917,"depth":917,"links":918},2,[919,920,921,922,923,924,925,926,927,928,929,930,931],{"id":49,"depth":917,"text":52},{"id":155,"depth":917,"text":158},{"id":210,"depth":917,"text":213},{"id":229,"depth":917,"text":232},{"id":248,"depth":917,"text":251},{"id":286,"depth":917,"text":289},{"id":331,"depth":917,"text":334},{"id":393,"depth":917,"text":396},{"id":404,"depth":917,"text":407},{"id":454,"depth":917,"text":457},{"id":512,"depth":917,"text":515},{"id":547,"depth":917,"text":550},{"id":859,"depth":917,"text":862},"markdown","content:blog:2007:getting-started-with-ruby-on-rails-on-mac-os-x.md","content","blog/2007/getting-started-with-ruby-on-rails-on-mac-os-x.md","blog/2007/getting-started-with-ruby-on-rails-on-mac-os-x","md","/blog/2007/getting-started-with-ruby-on-rails-on-mac-os-x/",828,4,[942,946,950],{"title":943,"date":944,"url":945},"HTML5 Video Cheatsheet: Optimizing videos for the web","2025-12-05T00:00:00Z","/blog/2025/html5-video-cheatsheet/",{"title":947,"date":948,"url":949},"Transactions in the MongoDB EF Core Provider","2025-10-25","/blog/2025/mongodb-explicit-transactions/",{"title":951,"date":952,"url":953},"Queryable Encryption with the MongoDB EF Core Provider","2025-09-22","/blog/2025/mongodb-queryable-encryption/",[955,974,1000,1031],{"_path":956,"_dir":957,"_draft":6,"_partial":6,"_locale":7,"title":958,"description":959,"id":960,"name":961,"date":962,"body":963,"_type":932,"_id":971,"_source":934,"_file":972,"_stem":973,"_extension":937},"/comments/getting-started-with-ruby-on-rails-on-mac-os-x/1937","getting-started-with-ruby-on-rails-on-mac-os-x","1937","As ide, try netbeans 6.0M10",1937,"ASpanishGuy","2007-07-10T07:51:40",{"type":17,"children":964,"toc":969},[965],{"type":20,"tag":21,"props":966,"children":967},{},[968],{"type":25,"value":959},{"title":9,"searchDepth":917,"depth":917,"links":970},[],"content:comments:getting-started-with-ruby-on-rails-on-mac-os-x:1937.md","comments/getting-started-with-ruby-on-rails-on-mac-os-x/1937.md","comments/getting-started-with-ruby-on-rails-on-mac-os-x/1937",{"_path":975,"_dir":957,"_draft":6,"_partial":6,"_locale":7,"title":976,"description":977,"id":978,"name":979,"email":980,"avatar":981,"url":982,"date":983,"body":984,"_type":932,"_id":997,"_source":934,"_file":998,"_stem":999,"_extension":937},"/comments/getting-started-with-ruby-on-rails-on-mac-os-x/1936","1936","One thing to note, for users that are new to Fink, is that you may need to configure Fink to install unstable packages in order to be able to install rubygems.",1936,"Adrian Ritchie","aidy@gringod.com","https://www.gravatar.com/avatar/c05caf8ffa358531f9f84bcb53e3c000?r=pg&d=retro","https://www.gringod.com/","2007-07-09T14:55:43",{"type":17,"children":985,"toc":995},[986,990],{"type":20,"tag":21,"props":987,"children":988},{},[989],{"type":25,"value":977},{"type":20,"tag":21,"props":991,"children":992},{},[993],{"type":25,"value":994},"Also, at time of writing this, the stable install of Ruby using Fink is 1.8.1, whereas the unstable install is 1.8.4",{"title":9,"searchDepth":917,"depth":917,"links":996},[],"content:comments:getting-started-with-ruby-on-rails-on-mac-os-x:1936.md","comments/getting-started-with-ruby-on-rails-on-mac-os-x/1936.md","comments/getting-started-with-ruby-on-rails-on-mac-os-x/1936",{"_path":1001,"_dir":957,"_draft":6,"_partial":6,"_locale":7,"title":1002,"description":1003,"id":1004,"name":1005,"email":1006,"avatar":1007,"url":1008,"date":1009,"body":1010,"_type":932,"_id":1028,"_source":934,"_file":1029,"_stem":1030,"_extension":937},"/comments/getting-started-with-ruby-on-rails-on-mac-os-x/1935","1935","There is always the risk that people coming to a new platform will bring their old approach and expectations with them.",1935,"Damien Guard","damien@envytech.co.uk","https://www.gravatar.com/avatar/dc72963e7279d34c85ed4c0b731ce5a9?r=pg&d=retro","https://damieng.com/","2007-07-09T14:41:46",{"type":17,"children":1011,"toc":1026},[1012,1016,1021],{"type":20,"tag":21,"props":1013,"children":1014},{},[1015],{"type":25,"value":1003},{"type":20,"tag":21,"props":1017,"children":1018},{},[1019],{"type":25,"value":1020},"We see C programmers immediately bypassing most of .NET heading straight to P/Invoke with disastrous results.",{"type":20,"tag":21,"props":1022,"children":1023},{},[1024],{"type":25,"value":1025},"It's an exercise in futility to fight against the principles of an environment.",{"title":9,"searchDepth":917,"depth":917,"links":1027},[],"content:comments:getting-started-with-ruby-on-rails-on-mac-os-x:1935.md","comments/getting-started-with-ruby-on-rails-on-mac-os-x/1935.md","comments/getting-started-with-ruby-on-rails-on-mac-os-x/1935",{"_path":1032,"_dir":957,"_draft":6,"_partial":6,"_locale":7,"title":1033,"description":1034,"id":1035,"name":1036,"date":1037,"body":1038,"_type":932,"_id":1076,"_source":934,"_file":1077,"_stem":1078,"_extension":937},"/comments/getting-started-with-ruby-on-rails-on-mac-os-x/1934","1934","It is a bit of a faff getting started, but amusingly it's a little easier to get started (at least with the base packages) on Windows!",1934,"Andrew Donaldson","2007-07-09T09:16:07",{"type":17,"children":1039,"toc":1074},[1040,1044,1049,1054,1059,1064,1069],{"type":20,"tag":21,"props":1041,"children":1042},{},[1043],{"type":25,"value":1034},{"type":20,"tag":21,"props":1045,"children":1046},{},[1047],{"type":25,"value":1048},"Try not to hate it from the start (i.e. reading too much into the marketing hype), just play with it with an open mind and you'll soon find the little things that make you smile.",{"type":20,"tag":21,"props":1050,"children":1051},{},[1052],{"type":25,"value":1053},"One comment on ruby versions though. From the rails page:",{"type":20,"tag":21,"props":1055,"children":1056},{},[1057],{"type":25,"value":1058},"We recommend Ruby 1.8.5 for use with Rails. Ruby 1.8.4 and 1.8.2 are still usable too, but version 1.8.3 is not.",{"type":20,"tag":21,"props":1060,"children":1061},{},[1062],{"type":25,"value":1063},"Just in case you notice anything weird happening that you can't explain.",{"type":20,"tag":21,"props":1065,"children":1066},{},[1067],{"type":25,"value":1068},"The main thing to remember with rails though, is that while it's Convention over configuration, that means you have to understand the rails conventions before you get the most benefit.",{"type":20,"tag":21,"props":1070,"children":1071},{},[1072],{"type":25,"value":1073},"Until then, it can seem slightly awkward and a bit foreign if you're used to .net (speaking from experience).",{"title":9,"searchDepth":917,"depth":917,"links":1075},[],"content:comments:getting-started-with-ruby-on-rails-on-mac-os-x:1934.md","comments/getting-started-with-ruby-on-rails-on-mac-os-x/1934.md","comments/getting-started-with-ruby-on-rails-on-mac-os-x/1934",1779264592685]