Todd Sundsted
Todd Sundsted
toddsundsted@epiktistes.com
Better dead than bored.
Introductionepiktistes.com/introduction
GitHubgithub.com/toddsundsted/ktistec
Pronounshe/him
馃寧Sector 001
Todd Sundsted

@Gargron@mastodon.social uhhh, right :-( need an edit button...

Todd Sundsted

Configure SMTP or users won't be able to activate new accounts. Definitely configure S3 for file storage, or your uploads (uploaded to `tmp`) will disappear every time the Heroku dyno restarts!

Todd Sundsted

Finish by configuring the Heroku environment (using `.env.production.sample` as a guide). Definitely configure `LOCAL_DOMAIN` and `LOCAL_HTTPS` correctly. (I didn't do this immediately and as a consequence the first handful of people I followed saw me as a user on an instance running on `localhost`.) For `PAPERCLIP_SECRET` and `SECRET_KEY_BASE` I ran `rake secret` in another Rails project to generate the secret keys.

Todd Sundsted

Fix Paperclip by changing `s3_permissions` from "public" to "public-read" in `config/initializers/paperclip.rb`. I'm pretty sure this is a bug. I need to investigate a bit more and then submit a PR.

Todd Sundsted

Create a `Procfile`:

web: bundle exec puma -C config/puma.rb
worker: bundle exec sidekiq -c 5 -v -q default -q mailers -q push

Todd Sundsted

Fix the Redis configuration throughout the code. Heroku wants to specify the Redis connection as a URL, so find `REDIS_HOST` and `REDIS_PORT` pairs and replace them with something like `url: ENV['REDIS_URL']`. Do this in `config/cable.yml`, `config/environments/production.rb`, `config/initializers/redis.rb` and `config/initializers/sidekiq.rb`.

Todd Sundsted

In the `Gemfile`, explicitly specify the Ruby version: `ruby '2.3.3'` -- the Mastodon code uses the Ruby safe-navigation operator and Heroku otherwise defaults to an earlier version of Ruby that doesn't support this feature.

Todd Sundsted

In `package.json`, change `devDependencies` to `dependencies`. The Heroku build will run the Node.js toolchain to build the assets. After you make this change, add *two* buildpacks: first `heroku buildpacks:add heroku/nodejs` and then `heroku buildpacks:add heroku/ruby`. In that order.

Todd Sundsted

(The following steps assume you are familiar with Heroku, GitHub, Ruby on Rails, Mastodon, etc.)

Todd Sundsted

Mastodon runs on Heroku with just a few minor tweaks. I intend to run a solo instance of Mastodon, and these changes allowed me to run this instance for free [on their free tier] and then upgrade [to their hobby tier or beyond] once it was clear everything was going to work out. My bill is currently $15/month.