This is a boilerplate to build your next SaaS product. It's a RubyOnRails 5 API only backend with Authentication and GrpahQL API. It works nicely together with clients made with React.js & React.Native or any other frontend which implements the JSON Web Tokens philosophy. We have a demo frontend made with gatsbyJS available here: https://gatsby-redux.zauberware.com/.
- Tested with ruby version
2.4.x
- Rails version
~>5.2.3
- Postgresql Server
or
clone the repo:
git clone https://github.com/zauberware/rails-devise-graphql my-saas-backend
cd my-saas-backend
Clone env_sample
to .env for local development. We set it up with default rails 3000
and gatsby 8000
ports:
cp env_sample .env
Install the bundle:
bundle install
Make sure the postresql is running on localhost. You may have to change your credentials under /config/database.yml
:
rake db:create
rake db:migrate
rake db:seed
Run the development server:
rails s
While this is an API-only application you will not be able to access any routes via browser. Download a GraphQL client like GraphiQL or others.
Point the GraphQL IDE to http://0.0.0.0:3000/graphql
Note: Make sure that the .env
file is included in the root of your project and you have defined CLIENT_URL
and DEVISE_JWT_SECRET_KEY
. You can try out the Demo frontend or you implement the actions in any other client. Read more about the JSON Web Token this. There are plenty of packages available.
The app uses a postgresql database. It implements the connector with the gem pg
. The app already includes a User
model with basic setup.
The app uses devise's logic for authentication. Emails are currently disabled in the environment settings.
devise-jwt is a devise extension which uses JWT tokens for user authentication. It follows secure by default principle.
graphql-ruby is a Ruby implementation of GraphQL. Sadly it's not 100% open source, but with the free version allows you amazing things to do. See the Getting Started Guide and the current implementations in this project under app/graphql/
.
Protect your app and only allow specific domains to access your API. Set CLIENT_URL=
in .env
to your prefered client. If you need advanced options please change the CORS settings here config/initializers/cors.rb
.
The app uses Puma as the web serber. It is a simple, fast, threaded, and highly concurrent HTTP 1.1 server for Ruby/Rack applications in development and production.
We are using the wonderful framework rspec. The testsuit also uses factory_bot_rails for fixtures.
Run rspec spec
The project runs on every webhoster with ruby installed. The only dependency is a PostgreSQL database. Create a block production:
in theconfig/database.yml
for your connection.
Choose the one click installer or push a clone of this repo to heroku by yourself. We added a Profile
to the project and heroku run the release:
statement after deploying a new version. Heroku will automatically set the db settings for your project, so there is nothing to do in config/database.yml
.
Make sure all ENV vars are set and the database settings are valid.
If you need a frontend than have a look at this basic Gatsby boilerplate. A Gatsby Redux SaaS starter for your next SaaS product. Uses react-redux, apollo-client, magicsoup.io, styled-components, styled-system.
Script: https://github.com/zauberware/rails-devise-graphql
Author website: https://www.zauberware.com