Thank you for your help and encouragement. I am pleased to report that
my first Ruby on Rails site is now operational. Bargain Stock Funds (
http://www.bargainstockfunds.com)
now displays profiles of over 10,000 stock ETFs and mutual funds from
the value investing point of view. There are detailed profiles of
funds, there is a master file showing all data for all funds in CSV
format, there is a list of the cheapest stock ETFs, and there is a list
showing the valuations of each Vanguard fund. Features in the works
include the ability to search for funds by various parameters and
listings of the cheapest mutual funds in each style box category
(large/medium/small, value/blend/growth).
The source code for my Rails site is at
https://github.com/jhsu802701/bsf/ . The source code for the web-scraping script that acquires the fund data is at
https://github.com/jhsu802701/bsf-python
. (I tried Ruby initially, but my script was too slow. I'm not sure
if switching to Python made it faster, or if other improvements made my
script faster. I plan to try Ruby/JRuby when I revamp my Doppler Value
Investing project, which profiles individual stocks in terms of net
liquidity and free cash flow. The web site is
http://www.dopplervalueinevsting.com .)
I'm
using a Postgres database to store the data on the stock funds. I
chose Postgres because it's far more robust and can handle far more web
traffic than the default SQLite3 database.
I have made sure to
use rspec tests and to implement these tests with Guard and Spork. It
allows me to implement Joel Spolsky's principle of testing early and
often. (Thanks, Rails!) I understand that history has not been kind to
Rails developers who neglect the testing process, and I had to make
sure that I am NEVER tempted to skip this step in the name of "meeting a
deadline."
My deployment process is configured to AUTOMATICALLY
update the config/database.yml file. (Saving the password in plaintext
on GitHub is not a viable option.) I had to make sure that I can update
the production web site with ZERO downtime.