https://github.com/rstudio-tech/python-crud-practice
Python-Django-CRUD-Practice
https://github.com/rstudio-tech/python-crud-practice
Last synced: 11 months ago
JSON representation
Python-Django-CRUD-Practice
- Host: GitHub
- URL: https://github.com/rstudio-tech/python-crud-practice
- Owner: rstudio-tech
- Created: 2024-11-30T15:40:44.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-11-30T15:41:51.000Z (over 1 year ago)
- Last Synced: 2025-07-02T17:55:28.911Z (11 months ago)
- Language: HTML
- Size: 314 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Python Quick Start Guide
This guide will walk you through deploying a Python Django CRUD application on Deis.
## Prerequisites
* A [User Account](http://docs.deis.io/en/latest/client/register/) on a [Deis Controller](http://docs.deis.io/en/latest/terms/controller/).
* A [Deis Formation](http://docs.deis.io/en/latest/gettingstarted/concepts/#formations) that is ready to host applications
If you do not yet have a controller or a Deis formation, please review the [Deis installation](http://docs.deis.io/en/latest/installation/) instructions.
## Setup your workstation
* Install [RubyGems](http://rubygems.org/pages/download) to get the `gem` command on your workstation
* Install [Foreman](http://ddollar.github.com/foreman/) with `gem install foreman`
* Install [Python](http://www.python.org/getit/) (we still recommend 2.7.x for library compatibility)
* Install [Django](https://www.djangoproject.com/)
## Clone your Application
If you want to use an existing application, no problem. You can also use the Deis sample application located at . Clone the example application to your local workstation:
$ git clone git@github.com:bengrunfeld/example-python-django-crud-app.git.git
$ cd example-python-django-crud-app
## Prepare your Application
To use a Python application with Deis, you will need to conform to 3 basic requirements:
1. Use [Pip](http://pypi.python.org/pypi/pip) to manage dependencies
2. Use [Foreman](http://ddollar.github.com/foreman/) to manage processes
3. Use [Environment Variables](https://help.ubuntu.com/community/EnvironmentVariables) to manage configuration inside your application
If you're deploying the example application, it already conforms to these requirements.
#### 1. Use Pip to manage dependencies
Pip requires that you explicitly declare your dependencies using a [requirements.txt](http://www.pip-installer.org/en/latest/cookbook.html) file. Here is a very basic example:
Django==1.6
dj-database-url==0.2.2
dj-static==0.0.5
gunicorn==18.0
psycopg2==2.5.1
static==0.4
We highly recommend isolating your dependencies inside a Python [virtualenv](https://python-guide.readthedocs.org/en/latest/dev/virtualenvs/):
$ virtualenv venv # create the virtualenv
New python executable in venv/bin/python
Installing setuptools............done.
Installing pip...............done.
$ source venv/bin/activate # activate the virtualenv
You can then install dependencies on your local workstation with `pip install -r requirements.txt`:
(venv)$ pip install -r requirements.txt
Downloading/unpacking dj-static==0.0.5 (from -r requirements.txt (line 3))
Downloading dj-static-0.0.5.tar.gz
Running setup.py egg_info for package dj-static
#### 2. Use Foreman to manage processes
Deis relies on a [Foreman](http://ddollar.github.com/foreman/) `Procfile` that lives in the root of your repository. This is where you define the command(s) used to run your application. Here is an example `Procfile`:
web: gunicorn django_crud_app.wsgi
This tells Deis to run `web` workers using the command `gunicorn django_crud_app.wsgi`. You can test this locally by running `foreman start`.
(venv)$ foreman start
You should now be able to access your application locally at .
#### 3. Use Environment Variables to manage configuration
Deis uses environment variables to manage your application's configuration, especially database configuration. For example, the following are used to connect your **Django app** to an **Amazon RDS Instance**.
DJ_ENGINE: postgresql_psycopg2
DJ_PASS: somepass
DJ_USER: someuser
DJ_HOST: id.somehost.us-west-2.rds.amazonaws.com
DJ_NAME: somedb
DJ_PORT: 5432
## Create a new Application
Per the prerequisites, we assume you have access to an existing Deis formation. If not, please review the Deis [installation instuctions](http://docs.deis.io/en/latest/gettingstarted/installation/).
Use the following command to create an application on an existing Deis formation.
$ deis create --formation= --id=
Creating application... done, created
Git remote deis added
If an ID is not provided, one will be auto-generated for you.
## Deploy your Application
Use `git push deis master` to deploy your application.
$ git push deis master
Counting objects: 65, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (40/40), done.
Writing objects: 100% (65/65), 15.95 KiB, done.
Total 65 (delta 19), reused 61 (delta 18)
Python app detected
-----> No runtime.txt provided; assuming python-2.7.4.
-----> Preparing Python runtime (python-2.7.4)
Once your **Django** application has been deployed, you will need to sync the database before you can open it. To do this, run `deis run 'python manage.py syncdb'`.
You can then use `deis open` to view it in a browser. To find out more info about your application, use `deis info`.
## Scale your Application
To scale your application's [Docker](http://docker.io) containers, use `deis scale` and specify the number of containers for each process type defined in your application's `Procfile`. For example, `deis scale web=8`.
$ deis scale web=8
Scaling containers... but first, coffee!
done in 16s
=== Containers
--- web: `gunicorn django_crud_app.wsgi`
web.1 up 2013-12-12T23:04:56.242Z (dev2-runtime-1)
web.2 up 2013-12-13T18:23:26.635Z (dev2-runtime-1)
web.3 up 2013-12-13T18:23:26.653Z (dev2-runtime-1)
web.4 up 2013-12-13T18:23:26.668Z (dev2-runtime-1)
web.5 up 2013-12-13T18:23:26.684Z (dev2-runtime-1)
web.6 up 2013-12-13T18:23:26.699Z (dev2-runtime-1)
web.7 up 2013-12-13T18:23:26.714Z (dev2-runtime-1)
web.8 up 2013-12-13T18:23:26.731Z (dev2-runtime-1)
## Configure your Application
Deis applications are configured using environment variables. To connect to a 3rd-party database like **Amazon RDS**, you'll need to set your login credentials using environment variables.
$ deis config:set DJ_NAME=notesdb
===
DJ_USER: opuser
DJ_PASS: thispassword
DJ_NAME: notesdb
DJ_HOST: dbid.somehost.us-west-2.rds.amazonaws.com
DJ_PORT: 5432
DJ_ENGINE: postgresql_psycopg2
`deis config:set` is also how you connect your application to other backing services like queues and caches. You can use `deis run` to execute one-off commands against your application for things like database administration, initial application setup and inspecting your container environment. `deis run env` will return all of your environment variables that have been set in Deis.
$ deis run ls -la
total 60
drwxr-xr-x 6 root root 4096 Dec 12 23:04 .
drwxr-xr-x 69 root root 4096 Dec 13 18:30 ..
-rw-rw-r-- 1 root root 26 Dec 12 22:11 .gitignore
drwxr-xr-x 3 root root 4096 Dec 12 23:03 .heroku
drwxr-xr-x 2 root root 4096 Dec 13 18:26 .profile.d
-rw-r--r-- 1 root root 57 Dec 12 23:04 .release
-rw-r--r-- 1 root root 35 Dec 12 23:04 Procfile
-rw-r--r-- 1 root root 826 Dec 12 23:04 README.md
drwxr-xr-x 2 root root 4096 Dec 13 18:26 django_crud_app
-rw-r--r-- 1 root root 258 Dec 12 23:04 manage.py
drwxr-xr-x 4 root root 4096 Dec 12 23:04 notes
-rw-r--r-- 1 root root 94 Dec 12 23:04 requirements.txt
-rw-r--r-- 1 root root 13 Dec 12 23:04 runtime.txt
## Troubleshoot your Application
To view your application's log output, including any errors or stack traces, use `deis logs`.
$ deis logs
Dec 13 18:27:28 ip-172-31-28-70 djangoapp[web.7]: 2013-12-13 18:27:28 [13] [INFO] Using worker: sync
Dec 13 18:27:28 ip-172-31-28-70 djangoapp[web.7]: 2013-12-13 18:27:28 [18] [INFO] Booting worker with pid: 18
Dec 13 18:27:39 ip-172-31-28-70 djangoapp[web.8]: 2013-12-13 18:27:39 [14] [INFO] Starting gunicorn 18.0
Dec 13 18:27:39 ip-172-31-28-70 djangoapp[web.8]: 2013-12-13 18:27:39 [14] [INFO] Listening at: http://0.0.0.0:10008 (14)
## Additional Resources
* [Get Deis](http://deis.io/get-deis/)
* [GitHub Project](https://github.com/opdemand/deis)
* [Documentation](http://docs.deis.io/)
* [Blog](http://deis.io/blog/)