Tutorial Using Our Sample To-Do App
In this tutorial you'll walk through the basic usage of Raftt operating in orchestration mode. In orchestration mode Raftt is responsible for spawning and managing ephemeral dev envs, and providing a great developer experience while using them.
If you wish to try Raftt operating in connect mode, where Raftt adds developer experience features to existing envs, see our connect mode tutorial.
The project
We created TooDoo, a simple to-do application, as a sample project to help you onboard Raftt quickly, without using your code.
The project is mainly written in Python (Flask) with some Go, but familiarity with these languages isn't necessary to complete this tutorial.
Your First raftt up
In this section, we'll get you up and running with your very own Raftt environment and explain what happens under the hood. Take the following steps -
- Clone the project's repo -
git clone https://github.com/rafttio/toodoo
cd
into the repo's folder.- Run
raftt up
and wait forEnvironment is ready!
to be printed.- You will be prompted to log in with your GitHub account.
- Please note that building and deploying the images might take a minute or two.
- Run
raftt status
to see the status of the environment services.
As seen in the above screenshot, the open port of the web container is mapped to the local port 3000. Let's see what happens when you browse it.
You can now play around with the app - add, remove, and edit tasks as you wish.
Under the Hood
When you ran raftt up
, you successfully started a sequence of events -
- Authentication with GitHub.
- Raftt's configuration file, raftt.yml, is detected by the Raftt client.
- In this case, raftt.yml was cloned with the repo. It will automatically be generated with default values if it doesn't exist.
- The raftt.yml file refers to the environment definitions - the
.raftt
file. - A new private and isolated environment is spawned in Raftt's cloud.
If you have docker installed, you can run docker ps
and see that nothing runs on your machine - it's all remote!
Working With the Env
Since your env is up, you can play around with the code and see how your changes affect the site!
Changing the Color of a Button
In line 74 of the file <repo>/templates/index.html
, change btn-primary
to btn-danger
, save, and reload the page. The submit button should now be colored red.
Debugging the Application
One of the most common things devs do is to debug their environment. Raftt currently supports interactively debugging Python, Go and Node.js code using Visual Studio Code or any JetBrains IDE. Additional support is continuously being added.
- VS Code
- JetBrains IDEs
To debug the application, follow these steps -
- Open the project in VS Code.
- Add a breakpoint inside the function
create
in the fileapp.py
. - Start debugging using the debug configuration
web
.- Debugging is pre-configured in this project by files committed in the repo. See here for details on how to do it yourself.
- Create a task in the TooDoo app.
- Check if it stopped where you added the breakpoint.
- Debug the remote service as if it were local.
To debug the application, follow these steps -
- Open the project in any JetBrains IDE.
- Install Raftt's plugin according to the instructions here.
- Add a breakpoint inside the function
create
in the fileapp.py
. - Start debugging using the debug configuration
web
.- Debugging is pre-configured in this project by files committed in the repo. See here for details on how to do it yourself.
- The IDE will ask you to configure a Python interpreter. You can ignore the request or choose an interpreter of your choice. It doesn't affect the remote environment that uses its own interpreter.
- Create a task in the TooDoo app.
- Check if it stopped where you added the breakpoint.
- Debug the remote service as if it were local.
Breaking the Code
You should now explore what happens if you make a mistake in the code. Make a change that will cause the main process to crash. You can go to <repo>/app.py
and add This won't work
to line 6. Flask auto-reload feature will automatically update the app, causing it to crash.
To "debug" the issue, you can run raftt logs web
and see the error in the container logs.
Now fix the issue you create - revert the breaking change and restart the app. You can restart it by running your code from the IDE (if you configured it in the previous section) or run raftt restart web
from the CLI which does the same. Note that it restarts the main process, while the container itself isn't reloaded. If you now refresh the webpage, you'll see the page loads successfully.
Branch Switching
Raftt seamlessly integrates with your workflow and makes switching between branches a breeze.
Switching to a new branch spawned a new environment while the previous environment(s) are waiting - if you want to come back to them later.
Switch to a different branch using git checkout v2
and refresh the page. Since a new env is spawned, it might take a minute or two until the env is responsive. The spawning happens in the background, if you want to follow the spawning status, you can run raftt status -w
.
You can now see that this branch has several new features - choosing an emoji for each task and counting the number of active users connected to your amazing TooDoo app.
Note that the tasks have changed, both in content and in the database schema. With Raftt, this change is seamless.
In addition, if you run raftt status
, you'll notice a few changes -
- The environment now has two additional services -
redis
andlive-backend
(running Go). - Python in the
web
container changed seamlessly from v3.9 to v3.10 without requiring any dependency change on your side.
You can go back to main using git checkout main
and look at any changes you previously made to the task list remain. For the next tutorial stage, you'll want to be in the v2
branch.
Collaborating With Other Team Members
Suppose you want to share your magnificent work on the active users features with the PM that defined it. You're used to calling your PM to see it work on your machine, but she's WFH (working-from-home). So, you may share your screen using Slack, but wouldn't it be much easier if you could just give her direct access to your dev environment? Well, with Raftt you can!
Ensure you're in the right branch - which means you're connected to the right environment.
Then, just run raftt expose web
and share the public URL!
Try It With Your Project
After seeing how easy it is to work with Raftt, you're welcome to use raftt on any project of yours - open source or private.
We'd love to hear about your experience in our Slack community or by contacting us directly.