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)