Due to privilieges restriction (Openshift free Plan), you’ll certainly find difficulties to backup your database using the well known gems, plugins available in Github such as Backup Gem. Since majoriy of these tools require write/read permissions to create and load configuration files.

This tutorial is generic and applies for any kind of Web app (Ruby on Rails, Django, Laravel …)

My Stack

Rails 4.1.4

Ruby 2.0

PostgreSQL 9.2

Cron 1.4 (Make sure to add this cartridge to your app)





Steps

1 - Create new Dropbox App and get the token

Create A new Dropbox App Through Dropbox Developers

Select Dropbox API -> App Folder then name your app

-> then name your app Once created, Go to Generated access token section and click generate

section and click generate Now you got the token !





2 - Setup Dropbox Shell Uploader

SSH into your Openshift Application then run the following commands.

# It goes to App data folder then downloads the dropbox uploader shell cd $OPENSHIFT_DATA_DIR && curl "https://gist.githubusercontent.com/medyo/e0c6e46ca31b995eb46f119af914f2eb/raw/ecf61975054b369b12f22cfe7d46855e30df8855/dropbox_uploader.sh" -o dropbox_uploader.sh

# It makes the script executable chmod +x dropbox_uploader.sh

# it creates new file containing: echo "OAUTH_ACCESS_TOKEN=PUT_YOUR_ACCESS_TOKEN_HERE" > dropbox_uploader

3 - Run first test

# Create a test file to upload echo "Hello World !" > demo.txt # Upload file to dropbox ./dropbox_uploader.sh upload demo.txt hello.txt

If you receive like this message:

Uploading “/var/lib/openshift/ID/app-root/data/demo.txt” to “/hello.txt”… DONE

Everything is Okay, if not recheck your access token.

3 - Automate the backup & Upload

In your local enviroment, open your app folder then locate the .openshift folder, go to cron folder and at that point, select the most suitable scheduling time for your cron task. For my case, I select daily , I do backups each day.

create a new file file auto_backup.sh with the following content, so the Openshift cron module can schedule its execution.

Don’t forget to push the changes to your app

Backup successfully uploaded to Dropbox :)

That’s it :)

For Mysql Database (Not Tested, source: https://gist.github.com/nicdoye/4697265)