Using Chef to set the database name, username, and password

One of my Ruby on Rails apps is Bargain Stock Funds
(https://github.com/jhsu802701/bsf), and it relies on a Ruby gem called
bsf_scrape (https://github.com/jhsu802701/bsf_scrape) to obtain and
process
data on stock funds and then save the results in a PostgreSQL database.

As you well know, the config/database.yml file needs the database name,
the
username, and the password. My procedures for handling this work but are
clunky and probably not considered to be best practices. From what I’ve
heard, using Chef is the best practice. However, Chef is complicated,
and
I’m having difficulty making sense of it.

In the source code for bsf_scrape (Ruby gem), I have functions in the
lib/bsf_scrape.rb file that do the following:

  1. Set the database name (stores it in a file)
  2. Get the database name (read it from a file)
  3. Set the path to the directory containing the username and password
    (necessary for the production environment, as the database username is
    different from the server username): Please note that while the database
    name is the same in the development and production environments, the
    username and password are different.
  4. Get the path to the directory containing the username and password
    (production environment)
  5. Reads the username from a file (production environment)
  6. Reads the password from a file (production environment)

In the source code for bsf (Rails app), I have procedures that obtain
the
database parameters during the deployment process. Running the
deployment
script (config/deploy.rb) involves running the update script
(config/update.rb), that provides the database name, database username,
and
database password and retains these parameters in files for use by the
bsf_scrape Ruby gem.

I know this process is convoluted, but I can’t replace it until I figure
out how to do it correctly in Chef. Are there any good Chef
tutorials/examples that will help me with this? My needs aren’t that
complex at the moment, but most of the tutorials/examples I’ve looked at
are.