# How to install Ruby on Rails 6.1 with asdf on macOS Big Sur

> Setup Ruby, Node, and PostgreSQL with asdf to quickly get up and running with Rails

Ruby and Ruby on Rails have an outdated reputation of being difficult to set up, and some jump on this point to push their full stack JavaScript fantasies. In 2021, however, this doesn’t have to be an issue with the correct tool.

In this tutorial, we will set up Ruby on Rails 6.1 with Ruby 3, a PostgreSQL database, and Webpacker via Node on a clean install of macOS Big Sur without any pain thanks to [asdf](https://asdf-vm.com/#/).

## Step 1 - Install Homebrew

> The Missing Package Manager for macOS (or Linux)

Install [Homebrew](https://brew.sh/) and update your `$PATH`. Take a look at the [official documentation](https://docs.brew.sh/) if you run into issues.

```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.zshrc
source ~/.zshrc # If you see weird behavior, restart your terminal
brew doctor
```

If everything is set up correctly, `brew doctor` will return `Your system is ready to brew.`. Address issues if there are any as they may cause issues down the road. You may also want to set up [Homebrew's shell-completion](https://docs.brew.sh/Shell-Completion#configuring-completions-in-zsh) at this time.

## Step 2 - Install asdf

> Manage multiple runtime versions with a single CLI tool

Install [asdf](https://asdf-vm.com/) as well as some necessary dependencies and update your `~/.zshrc`. If you'd like to install asdf through a different method, check out [the official documentation](https://asdf-vm.com/#/core-manage-asdf).

We are also going to create a `.asdfrc` file and [enable `legacy_version_file`](https://asdf-vm.com/#/core-configuration?id=homeasdfrc), which will allow us to get version info from files like `.ruby-version`.

```bash
brew install coreutils curl git gpg gawk zsh yarn asdf
echo -e "\n. $(brew --prefix asdf)/asdf.sh" >> ~/.zshrc
echo 'legacy_version_file = yes' >> ~/.asdfrc
```

Restart your terminal.

## Step 3 - Install Ruby

```bash
asdf plugin add ruby
asdf install ruby 3.0.0
asdf global ruby 3.0.0
```

[Documentation](https://github.com/asdf-vm/asdf-ruby)

## Step 4 - Install Node

```bash
asdf plugin add nodejs
bash -c '`${ASDF_DATA_DIR:=$HOME/`.asdf}/plugins/nodejs/bin/import-release-team-keyring'
asdf install nodejs 14.16.0
asdf global nodejs 14.16.0
```

[Documentation](https://github.com/asdf-vm/asdf-nodejs)

## Step 5 - Install Postgres

```bash
asdf plugin add postgres
asdf install postgres 13.2
asdf global postgres 13.2
$HOME/.asdf/installs/postgres/13.2/bin/pg_ctl -D $HOME/.asdf/installs/postgres/13.2/data -l logfile start
```

[Documentation](https://github.com/smashedtoatoms/asdf-postgres)

🔥 You can [add this handy function to your `~/.zshrc`](https://gist.github.com/jbranchaud/3cda6be6e1dc69c6f55435a387018dac "3cda6be6e1dc69c6f55435a387018dac") from [Josh Branchaud](https://twitter.com/jbrancha) to make switching postgres versions easier.

## Step 6 - Create Ruby on Rails app

To make sure everything's correct, let's create a new Rails app with a postgres database:

```bash
gem install bundler rails
rails new asdf_demo -d postgresql
cd asdf_demo
bin/rails db:prepare
bin/rails s
```

Open `localhost:3000` in your browser and you should see the Rails welcome screen. 🥳

## Summary

In the end, this was all we needed to get a Rails app running on a clean install of macOS Big Sur:

```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.zshrc
source ~/.zshrc
brew doctor
brew install coreutils curl git gpg gawk zsh yarn asdf
echo -e "\n. $(brew --prefix asdf)/asdf.sh" >> ~/.zshrc
echo 'legacy_version_file = yes' >> ~/.asdfrc
# ⚠️ Restart your terminal ⚠️
asdf plugin add ruby
asdf install ruby 3.0.0
asdf global ruby 3.0.0
asdf plugin add nodejs
bash -c '`${ASDF_DATA_DIR:=$HOME/`.asdf}/plugins/nodejs/bin/import-release-team-keyring'
asdf install nodejs 14.16.0
asdf global nodejs 14.16.0
asdf plugin add postgres
asdf install postgres 13.2
asdf global postgres 13.2
$HOME/.asdf/installs/postgres/13.2/bin/pg_ctl -D $HOME/.asdf/installs/postgres/13.2/data -l logfile start
# ⚠️ Restart your terminal ⚠️
gem install bundler rails
rails new asdf_demo -d postgresql
cd asdf_demo
bin/rails db:prepare
bin/rails s
```

> I am sure there are ways to improve this and I would love to hear any optimizations you come up with!

It doesn't have to end here though! Checkout [asdf's plugin list](https://asdf-vm.com/#/plugins-all?id=plugin-list) for all available plugins. [Redis](https://github.com/smashedtoatoms/asdf-redis), [Elasticsearch](https://github.com/asdf-community/asdf-elasticsearch), and [ImageMagick](https://github.com/mangalakader/asdf-imagemagick) can all be managed through asdf.

Hopefully this tutorial will help you get up and running with a Ruby on Rails 6.1 development environment lightning fast and pain free. 🚀

Happy coding!
