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.