My experience with Chef on CentOS 5 recently confirmed this is still a beta product. The bootstrap instructions are incomplete, leaving you hanging half-way down the page at "CentOS 5.x users will need to have version 4.2 or better of gcc in order for this to function. This may be a newer version of gcc than that which is installed via yum." To finish the installation detour to this page that provides links to the FrameOS RBEL repository and installation instructions for the Chef server that worked for me. After completing the server install return to Bootstrap instructions and resume from ‘Verify All Components are Running’.
mysql gem installation on Windows x64
Having run into multiple issues setting up MySQL with Rails on Windows x64 my recommendations are:
- Install the 32-bit version of MySQL, do not try to use the 64-bit version.
- Install into a path with no spaces, do not accept a default like "C:\Program Files\MySQL\MySQL Server 5.5\"
- Install the MySQL gem with an invocation similar to:
gem install mysql -- --platform=ruby --with-mysql-dir="D:\Programs\MySQL\MySQL-Server-5.5" --with-libmysqllib="D:\Programs\MySQL\MySQL-Server-5.5\lib\"
- Be sure to uninstall/reinstall whenever you install a new version of MySQL.
- Make sure D:\Programs\MySQL\MySQL-Server-5.5\lib is included in your path, as well as D:\Programs\MySQL\MySQL-Server-5.5\bin. Make sure other copies of libmysql.dll are not being picked up from elsewhere on your path or your ruby installation directories.
Unfortunately with mysql-5.5.15-win32, mysql-2.8.1-x86-mingw32 and Windows 7 x64 even this was not enough: after experiencing a segmentation fault running rake db:create I gave up and downloaded the libMySql.ddl from InstantRails.
One year with Rails
One year since I picked up ‘Agile Web Development with Rails’ and coded my first Rails model/controller/view: seems so long ago now.
Things I’ve mastered in the past year:
- Test driven development using unit and functional tests.
- Master-detail forms using Ajax to add and delete rows, fetching product details in JSON for codes entered into a line item.
- Prototype and jQuery, including jQuery UI datepickers.
- Loading and parsing XML data files using Nokogiri.
- Building complex reports using nested views in PostgreSQL, maintained using rails_sql_views.
- Creating formatted, multi-tab Excel spreadsheets using Spreadsheet gem.
- Creating pixel-perfect PDF reports using JasperReports loaded using Java-Ruby bridge.
- Hosting using Apache with Passenger, Mongrel, Thin and Unicorn.
- Monitoring using ScoutApp.
- Upgrading a production app from Rails 2.3.4 to Rails 3.0.9.
- Switching from ERB to HAML.
Using Apache with Mongrel or Thin and Rails 3
When using mod_proxy to load balance between members of a mongrel or thin cluster it’s important not to pass requests through for static content. A basic virtual site can be configured like this:
<VirtualHost *:80> ServerName myapp.mydomain.com DocumentRoot /opt/myapp/public <Proxy balancer://thinservers> BalancerMember http://127.0.0.1:3000 BalancerMember http://127.0.0.1:3001 BalancerMember http://127.0.0.1:3002 </Proxy> ProxyPreserveHost On ProxyPass /images ! ProxyPass /stylesheets ! ProxyPass /javascripts ! ProxyPass / balancer://thinservers/ ProxyPassReverse / balancer://thinservers/ <Proxy *> Order deny,allow Allow from all </Proxy> ErrorLog /var/log/apache2/error.log LogLevel warn CustomLog /var/log/apache2/access.log combined </VirtualHost>
Thin with Apache
Having run into compatibility issues between Passenger and RJB and between Mongrel and Rails 2.3.8 I’ve been looking at Thin.
Slicehost has a couple of good articles on setting up a Thin cluster with Apache on Ubuntu.
In summary:
gem install thin thin install /usr/sbin/update-rc.d -f thin defaults thin –h # help thin -C /etc/thin/${appenv}.yml -c ${apphome} -s 3 -e production config su – ${appenv}bat ; thin -C /etc/thin/${appenv}.yml start
Installing Nokogiri on Ubuntu
Worked for me with Nokogiri 1.4.4 on Ubuntu 10.04 LTS:
# ruby developer packages sudo apt-get install ruby1.8-dev ruby1.8 ri1.8 rdoc1.8 irb1.8 sudo apt-get install libreadline-ruby1.8 libruby1.8 libopenssl-ruby # nokogiri requirements sudo apt-get install libxslt-dev libxml2-dev sudo gem install nokogiri
Getting started with Ruby on Windows
To get started my preference is to use RubyInstaller for Windows. Both 1.8.x and 1.9.x variants are available. I group together my Ruby variants under \Programs\rubies.
Having installed multiple variants you can register and manage them using Pik. I recommend not changing the installation path from the default C:\pik. It is in fact possible to install Ruby using Pik (by default Pik installs rubies in %HOMEPATH%\.pik\rubies), but I prefer not to do so.
pik add d:\programs\rubies\ruby-1.8.7-p334\bin pik add d:\programs\rubies\ruby-1.9.2-p180\bin
To access code repositories you will need to download and install msysGit for Windows. I also strongly recommend TortoiseGit instead of Git GUI.
To build native extension gems like Nokogiri you will need DevKit. I tried
pik package devkit install
but this did not work for me (got HTTP 404) so I had to manually download and extract the DevKit. DevKit also includes MSYS/MinGW.
For an IDE I use Aptana Studio 3. Studio looks for an existing Git installation or installs its own private copy of portable Git. Studio then leverages the msysGit bash shell.
RubyInstaller includes gem, which can then be used to install bundler to complete the setup of the environment.
RJB on Ubuntu LTS 10.04
Ruby-Java Bridge (RJB) allows use of Java libraries from within a c-ruby environment, see this slideshow. RJB provides an alternative when a full port to JRuby is impractical.
First install Java and build-essential
apt-get update apt-get install openjdk-6-jdk apt-get install build-essential
Now install rjb gem
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk gem install rjb
The bad news is that RJB currently crashes when used with Passenger so the best alternative is to revert to Mongrel.
Building Your Own Website
There are several levels of sophistication:
- Using wizards
- Leveraging open source packages
- Mastering HTML, CSS and Javascript in the browser
- Writing server programs to use a database
Really simple websites can be built using
These are all good for static, slowly changing content. If you want to publish content regularly consider blogging with
If you want to go beyond blogging consider an open source package like Joomla or Drupal. Sign-up for hosting with a company like Dreamhost or GoDaddy and they will give you simple installation scripts to get started with these packages for a few dollars a month. If you want to customize these or do something more your own you will need to master HTML/CSS/Javascript (DHTML aka. DOM scripting). Get an HTML editor and study the tutorials at W3 Schools After you’ve learned DHTML you can go on to build database driven sites using Microsoft’s technologies, PHP or Ruby On Rails
Rails Datepickers
There are multiple ways to add date-pickers to a Rails application. Searching for a date picker online I came across one Prototype based gem called calendar_date_select that was featured by Ruby Inside, and another one called Calendar-DatePicker-for-Rails. On closer inspection, however, calendar_date_select was last updated in 2008 and is looking for a new maintainer: the demo still uses Rails 2.2.2: it does not work with some later versions.
Apart from using a date-picker specifically packaged for Rails it is not that difficult to use a free-standing Javascript solution: I found a nice looking solution called unobtrusive-date-picker but it appears to have limited support. There are also Javascript widget libraries like AUI and jQuery UI. Finally I came across a Railscast that mentions calendar_date_select but goes on to recommends jQuery UI. jQuery can be integrated with Rails 2.x using jRails or Rails 3 with jquery-rails and/or jquery-ujs or you can simply forgo the integration and just use jQuery directly. In my case I linked to the libraries hosted by Google like this:
<%= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js", "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.min.js" %> <%= stylesheet_link_tag "http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/humanity/jquery-ui.css" %>
The remaining details of using a jQuery UI datepicker with Rails are covered in the Railscast.