Skip to content

Commit

Permalink
Update config (#59)
Browse files Browse the repository at this point in the history
* Add a sample database yml, and ignore the actual config so folks can locally configure

* Treat storage.yml the same way, add an update step in Dockerfile

* Remove database and storage from tracked files

* CI fixes

* Fixup syntax error

* Fix shell command

* Fixup storage configuration

* Update readme
  • Loading branch information
crespire authored Oct 17, 2024
1 parent 9b104d9 commit e71565b
Show file tree
Hide file tree
Showing 9 changed files with 164 additions and 10 deletions.
14 changes: 14 additions & 0 deletions .github/actions/setup-services/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
name: Set up db and storage config
description: Set up db and storage configurations.

runs:
using: "composite"
steps:
- name: Set up db and storage configuration
shell: bash
run: |
cp config/database.yml.sample config/database.yml
cp config/storage.yml.sample config/storage.yml
RAILS_ENV=test bundle exec rails db:setup
6 changes: 2 additions & 4 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,8 @@ jobs:
with:
bundler-cache: true

- name: Setup Test Database
run: bundle exec rails db:setup
env:
RAILS_ENV: test
- name: Set up Project
uses: ./.github/actions/setup-services

- name: Precompile Assets
run: bundle exec rails assets:precompile
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@
# Ignore master key for decrypting credentials and more.
/config/master.key

# Ignore local database setup
/config/database.yml
/config/storage.yml

/app/assets/builds/*
!/app/assets/builds/.keep

Expand Down
4 changes: 4 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ RUN yarn install --frozen-lockfile
# Copy application code
COPY . .

# Use sample configs
RUN mv config/database.yml.production config/database.yml 2>/dev/null || true
RUN mv config/storage.yml.production config/storage.yml 2>/dev/null || true

# Precompile bootsnap code for faster boot times
RUN bundle exec bootsnap precompile app/ lib/

Expand Down
24 changes: 18 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,30 @@ Website, Rails powered!
* Ruby 3.2.2
* yarn 1.22.6
* node >= 20
* PSQL >= 14

### Development Setup
Changes should be added via merge request, as `main` has a CI action that deploys on merge.
Changes should be added via merge request, as `main` has a CI action that deploys on merge. The application relies on a PostgreSQL instance for its database, so make sure to set that up for your local environment.

Currently, the application does not require any database and so defaults to SQLite, but this might change in the future.
Because we use ActionText, the application does require dependencies for ActiveStorage as well (ie, `libvips`) though these are currently not used.

The database and storage configurations are provided in a `.sample` file, make sure you copy those and rename them to the correct `.yml` file. These files are git ignored, so you can set up your local environment as needed.

1. Pull/clone the repo
1. `bundle install`
1. `yarn install`
1. Run `bundle install`
1. Run `yarn install`
1. Run `cp ./config/database.yml.sample ./config/database.yml`
1. Run `cp ./config/storage.yml.sample ./config/storage.yml`
1. Edit the two files above as needed.
1. Run `bundle exec rails db:setup`

This should get the application setup and ready to run.

This should get the application setup.
To run the application locally:
1. Run `bin/dev` - this command will watch JS and CSS to rebuild
1. Run `bundle exec rails s` - this command will run the Rails server

To run development, run `bin/dev` - this command will watch JS and CSS to rebuild and run the Rails server
### Deploying to Production
This application is deployed via Dockerfile, so changes that will affect dependencies, etc should be reflected in the `Dockerfile`.


File renamed without changes.
88 changes: 88 additions & 0 deletions config/database.yml.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# PostgreSQL. Versions 9.3 and up are supported.
#
# Install the pg driver:
# gem install pg
# On macOS with Homebrew:
# gem install pg -- --with-pg-config=/usr/local/bin/pg_config
# On Windows:
# gem install pg
# Choose the win32 build.
# Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem "pg"
#
default: &default
adapter: postgresql
encoding: unicode
# For details on connection pooling, see Rails configuration guide
# https://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
<<: *default
database: site_v2_development

# The specified database role being used to connect to PostgreSQL.
# To create additional roles in PostgreSQL see `$ createuser --help`.
# When left blank, PostgreSQL will use the default role. This is
# the same name as the operating system user running Rails.
#username: site_v2

# The password associated with the PostgreSQL role (username).
#password:

# Connect on a TCP socket. Omitted by default since the client uses a
# domain socket that doesn't need configuration. Windows does not have
# domain sockets, so uncomment these lines.
#host: localhost

# The TCP port the server listens on. Defaults to 5432.
# If your server runs on a different port number, change accordingly.
#port: 5432

# Schema search path. The server defaults to $user,public
#schema_search_path: myapp,sharedapp,public

# Minimum log levels, in increasing order:
# debug5, debug4, debug3, debug2, debug1,
# log, notice, warning, error, fatal, and panic
# Defaults to warning.
#min_messages: notice

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
<<: *default
database: site_v2_test
username: postgres
password: postgres
port: 5432
host: localhost
encoding: utf8

# As with config/credentials.yml, you never want to store sensitive information,
# like your database password, in your source code. If your source code is
# ever seen by anyone, they now have access to your database.
#
# Instead, provide the password or a full connection URL as an environment
# variable when you boot the app. For example:
#
# DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase"
#
#
# If the connection URL is provided in the special DATABASE_URL environment
# variable, Rails will automatically merge its configuration values on top of
# the values provided in this file. Alternatively, you can specify a connection
# URL environment variable explicitly:
#
# production:
# url: <%= ENV["MY_APP_DATABASE_URL"] %>
#
# Read https://guides.rubyonrails.org/configuring.html#configuring-a-database
# for a full overview on how database connection configuration can be specified.
#
production:
<<: *default
url: <%= ENV["DATABASE_URL"] %>
File renamed without changes.
34 changes: 34 additions & 0 deletions config/storage.yml.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
test:
service: Disk
root: <%= Rails.root.join("tmp/storage") %>

local:
service: Disk
root: <%= Rails.root.join("storage") %>

# Use bin/rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
# amazon:
# service: S3
# access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
# secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
# region: us-east-1
# bucket: your_own_bucket-<%= Rails.env %>

# Remember not to checkin your GCS keyfile to a repository
# google:
# service: GCS
# project: your_project
# credentials: <%= Rails.root.join("path/to/gcs.keyfile") %>
# bucket: your_own_bucket-<%= Rails.env %>

# Use bin/rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key)
# microsoft:
# service: AzureStorage
# storage_account_name: your_account_name
# storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %>
# container: your_container_name-<%= Rails.env %>

# mirror:
# service: Mirror
# primary: local
# mirrors: [ amazon, google, microsoft ]

0 comments on commit e71565b

Please sign in to comment.