The motivator for this small quality of life "hack" came from the frustration of managing all possible variables of creating a new Rails project. Every time I wanted to test a new tutorial or course, I had to worry about the already existing versions of Rails, Ruby, and npm packages.The obvious solution for my problem is to containerize my test applications.
This is just a quick script to help bootstrap this process by spinning up a temporary docker container, generating a new Rails application, and writing the Dockerfile and docker-compose.yaml files to the newly created application folder.
Append this function to the end of your ~/.zshrc
or ~/.bashrc
generate_rails_project() { docker run -it --rm -v "$PWD":/"$1" -w /"$1" ruby:latest /bin/bash -c "curl\ -sL https://deb.nodesource.com/setup_12.x | bash && apt-get install -y nodejs &&\ npm i -g yarn && gem install rails && rails new $1 $2" echo "FROM ruby:latest \n \n RUN mkdir /"$1" WORKDIR /"$1" \n RUN apt-get update RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - RUN apt-get install -y nodejs RUN npm i -g yarn RUN gem install bundler \n \n COPY Gemfile /"$1"/Gemfile COPY Gemfile.lock /"$1"/Gemfile.lock RUN bundle install COPY . /"$1" " > "$1"/Dockerfile echo "version: '3.6' services: $1: build: context: . volumes: - .:/"$1" ports: - '3000:3000' command: bash -c \"rm -f tmp/pids/server.pid && bundle exec rails s -p 3000\ -b '0.0.0.0'\"" > "$1"/docker-compose.yaml }
You might want to alias this function to something that is quicker to use. I'll go with nrp for new rails project
:
# I'm adding this at the very end of my ~/.zshrc, after the new function alias nrp=generate_rails_project
to make changes available immediately, run:
source ~/.zshrc
or if you're not running the ZSH shell:
source ~/.bashrc
To use this new alias:
nrp my_project cd my_project docker-compose up --build
in a new tab you can start your IDE and issue commands to the docker container like so:
code . docker-compose run my_project rails generate controller Welcome index
You can also start a new Rails API application as such:
nrp my_project --api
Things to note:
- This script will use the latest version of Ruby and Rails available
- You need docker and docker compose installed for this setup to work
- This setup should work as is on most linux distros and on OSX, but for Windows 10 you will probably need to configure this in the WSL or git bash
- This script should not be used for generating production applications. The intent of this script is to quickly bootstrap new projects for test environments.
Top comments (0)