Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions getting-started/migrate-from-heroku.html.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

**Time required:** Most apps can be migrated in under 30 minutes.

Unlike Heroku's dyno-based tiers, Fly.io uses pay-as-you-go pricing - you only pay for the compute, storage, and bandwidth you actually use. There are no fixed plan tiers to choose from. See [fly.io/pricing](https://fly.io/pricing) for current rates.

Check failure on line 27 in getting-started/migrate-from-heroku.html.md

View workflow job for this annotation

GitHub Actions / Vale linter

[vale] reported by reviewdog 🐶 [Vale.Terms] Use 'Dyno' instead of 'dyno'. Raw Output: {"message": "[Vale.Terms] Use 'Dyno' instead of 'dyno'.", "location": {"path": "getting-started/migrate-from-heroku.html.md", "range": {"start": {"line": 27, "column": 17}}}, "severity": "ERROR"}

## TL;DR - The Fast Path

Expand All @@ -32,7 +32,7 @@

```bash
# 1. Export secrets (excluding Heroku-managed vars)
heroku config -s -a YOUR_HEROKU_APP | grep -v '^DATABASE_URL\|^REDIS_URL\|^HEROKU_' > secrets.txt
heroku config -s -a YOUR_HEROKU_APP | grep -v '^DATABASE_URL\|^REDIS_URL\|^HEROKU_' | sed "s/='\(.*\)'$/=\"\1\"/" > secrets.txt
# ⚠️ Don't commit secrets.txt to git!

# 2. Create Fly app (generates Dockerfile automatically)
Expand Down Expand Up @@ -62,7 +62,7 @@

## Prerequisites

Install both CLIs:

Check warning on line 65 in getting-started/migrate-from-heroku.html.md

View workflow job for this annotation

GitHub Actions / Vale linter

[vale] reported by reviewdog 🐶 [Fly.Spelling] Is 'CLIs' a typo? Raw Output: {"message": "[Fly.Spelling] Is 'CLIs' a typo?", "location": {"path": "getting-started/migrate-from-heroku.html.md", "range": {"start": {"line": 65, "column": 14}}}, "severity": "INFO"}

```bash
# Install Fly CLI
Expand All @@ -84,7 +84,7 @@
export HEROKU_APP="your-app-name"

# Export environment variables (excluding Heroku-managed ones)
heroku config -s -a $HEROKU_APP | grep -v '^HEROKU_' | grep -v '^DATABASE_URL' | grep -v '^REDIS_URL' > heroku-env.txt
heroku config -s -a $HEROKU_APP | grep -v '^HEROKU_' | grep -v '^DATABASE_URL' | grep -v '^REDIS_URL' | sed "s/='\(.*\)'$/=\"\1\"/" > heroku-env.txt
# ⚠️ This file contains secrets - don't commit it to git!

# See what add-ons you have
Expand All @@ -96,7 +96,7 @@

Take note of:
- Your add-ons (Postgres, Redis, etc.)
- Your dyno types (web, worker, etc.)

Check failure on line 99 in getting-started/migrate-from-heroku.html.md

View workflow job for this annotation

GitHub Actions / Vale linter

[vale] reported by reviewdog 🐶 [Vale.Terms] Use 'Dyno' instead of 'dyno'. Raw Output: {"message": "[Vale.Terms] Use 'Dyno' instead of 'dyno'.", "location": {"path": "getting-started/migrate-from-heroku.html.md", "range": {"start": {"line": 99, "column": 8}}}, "severity": "ERROR"}

## Step 2: Prepare Your App

Expand Down Expand Up @@ -305,10 +305,10 @@
| Heroku Postgres | `fly mpg create` (Managed Postgres) |
| Heroku Redis / Redis Cloud | `fly redis create` (Upstash) |
| Heroku Scheduler | Use cron in your app, or a separate "cron" process |
| Papertrail | `fly logs` built-in, or add a log drain |

Check warning on line 308 in getting-started/migrate-from-heroku.html.md

View workflow job for this annotation

GitHub Actions / Vale linter

[vale] reported by reviewdog 🐶 [Fly.Spelling] Is 'Papertrail' a typo? Raw Output: {"message": "[Fly.Spelling] Is 'Papertrail' a typo?", "location": {"path": "getting-started/migrate-from-heroku.html.md", "range": {"start": {"line": 308, "column": 3}}}, "severity": "INFO"}
| SendGrid | Keep using SendGrid (just use API key) |
| New Relic | `fly extensions sentry` or keep using New Relic |
| S3 / Bucketeer | `fly storage create` (Tigris) or keep using S3 |

Check warning on line 311 in getting-started/migrate-from-heroku.html.md

View workflow job for this annotation

GitHub Actions / Vale linter

[vale] reported by reviewdog 🐶 [Fly.Spelling] Is 'Bucketeer' a typo? Raw Output: {"message": "[Fly.Spelling] Is 'Bucketeer' a typo?", "location": {"path": "getting-started/migrate-from-heroku.html.md", "range": {"start": {"line": 311, "column": 8}}}, "severity": "INFO"}
| Elasticsearch | Deploy Elasticsearch as a Fly app, or use a hosted service |
| Memcached | Use Redis instead (`fly redis create`) |

Expand All @@ -334,7 +334,7 @@
1. Update your DNS to point to Fly
2. Wait for DNS propagation (check with `dig yourdomain.com`)
3. Monitor both apps for a day to ensure no traffic goes to Heroku
4. Scale down Heroku dynos: `heroku ps:scale web=0 worker=0 -a $HEROKU_APP`

Check warning on line 337 in getting-started/migrate-from-heroku.html.md

View workflow job for this annotation

GitHub Actions / Vale linter

[vale] reported by reviewdog 🐶 [Fly.Spelling] Is 'dynos' a typo? Raw Output: {"message": "[Fly.Spelling] Is 'dynos' a typo?", "location": {"path": "getting-started/migrate-from-heroku.html.md", "range": {"start": {"line": 337, "column": 22}}}, "severity": "INFO"}
5. Cancel Heroku add-ons
6. Delete the Heroku app: `heroku apps:destroy -a $HEROKU_APP`

Expand Down
Loading