diff --git a/.bowerrc b/.bowerrc
new file mode 100644
index 000000000..7a15de5f4
--- /dev/null
+++ b/.bowerrc
@@ -0,0 +1,3 @@
+{
+ "directory": "rd_ui/app/bower_components"
+}
diff --git a/.gitignore b/.gitignore
index 57951982b..d35a8f743 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,8 @@ dump.rdb
# Docker related
docker-compose.yml
+
+node_modules
+.tmp
+.sass-cache
+rd_ui/app/bower_components
diff --git a/Makefile b/Makefile
index a15f0931a..f4e15a9b6 100644
--- a/Makefile
+++ b/Makefile
@@ -6,17 +6,17 @@ BASE_VERSION=$(shell python ./manage.py version | cut -d + -f 1)
FILENAME=$(CIRCLE_ARTIFACTS)/$(NAME).$(VERSION).tar.gz
deps:
- if [ -d "./rd_ui/app" ]; then cd rd_ui && npm install; fi
- if [ -d "./rd_ui/app" ]; then cd rd_ui && npm run bower install; fi
- if [ -d "./rd_ui/app" ]; then cd rd_ui && npm run build; fi
+ if [ -d "./rd_ui/app" ]; then npm install; fi
+ if [ -d "./rd_ui/app" ]; then npm run bower install; fi
+ if [ -d "./rd_ui/app" ]; then npm run build; fi
pack:
sed -ri "s/^__version__ = '([0-9.]*)'/__version__ = '$(FULL_VERSION)'/" redash/__init__.py
- tar -zcv -f $(FILENAME) --exclude="optipng*" --exclude=".git*" --exclude="*.pyc" --exclude="*.pyo" --exclude="venv" --exclude="rd_ui/node_modules" --exclude="rd_ui/dist/bower_components" --exclude="rd_ui/app" *
+ tar -zcv -f $(FILENAME) --exclude="optipng*" --exclude=".git*" --exclude="*.pyc" --exclude="*.pyo" --exclude="venv" --exclude="node_modules" --exclude="rd_ui/dist/bower_components" --exclude="rd_ui/app" *
upload:
python bin/release_manager.py $(CIRCLE_SHA1) $(BASE_VERSION) $(FILENAME)
test:
nosetests --with-coverage --cover-package=redash tests/
- #cd rd_ui && grunt test
+ #grunt test
diff --git a/Procfile.heroku b/Procfile.heroku
new file mode 100644
index 000000000..89cb91bd3
--- /dev/null
+++ b/Procfile.heroku
@@ -0,0 +1,2 @@
+web: ./manage.py runserver -p $PORT --host 0.0.0.0
+worker: ./bin/run celery worker --app=redash.worker --beat -Q queries,celery,scheduled_queries
diff --git a/bin/pre_compile b/bin/pre_compile
new file mode 100644
index 000000000..c5777bffc
--- /dev/null
+++ b/bin/pre_compile
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+# heroku post_compile script
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+pushd $DIR/..
+
+# heroku requires cffi to be in requirements.txt in order for libffi to be installed.
+# https://github.com/heroku/heroku-buildpack-python/blob/master/bin/steps/cryptography
+# to avoid making it a requirement for other build systems, we'll inject it now
+# into the requirements.txt file
+# remove pymssql, it doesn't compile on heroku
+grep -v '^pymssql' requirements_all_ds.txt >> requirements.txt
+
+# make the heroku Procfile the active one
+cp Procfile.heroku Procfile
+
+popd
diff --git a/rd_ui/bower.json b/bower.json
similarity index 100%
rename from rd_ui/bower.json
rename to bower.json
diff --git a/docs/setup.rst b/docs/setup.rst
index 4b459cced..c769d1393 100644
--- a/docs/setup.rst
+++ b/docs/setup.rst
@@ -79,6 +79,44 @@ Docker Compose
Now proceed to `"Setup" <#setup>`__.
+Heroku
+------
+
+1. Install `Heroku CLI `_.
+
+2. Create Heroku App::
+
+ $ heroku apps:create
+
+2. Set application buildpacks::
+
+ $ heroku buildpacks:set heroku/python
+ $ heroku buildpacks:add --index 1 heroku/nodejs
+
+3. Add Postgres addon::
+
+ $ heroku addons:create heroku-postgresql:hobby-dev
+
+4. Add Redis addon::
+
+ $ heroku addons:create heroku-redis:hobby-dev
+
+5. Set environment variables::
+
+ $ heroku config:set REDASH_DATABASE_URL=`heroku config:get DATABASE_URL`
+ $ heroku config:set REDASH_REDIS_URL=`heroku config:get REDIS_URL`
+ $ heroku config:set REDASH_COOKIE_SECRET=''
+
+6. Push the repository to Heroku::
+
+ $ git push heroku master
+
+7. Create database tables::
+
+ $ heroku run bash
+ $ python manage.py database create_tables
+
+
Other
-----
diff --git a/rd_ui/gulpfile.js b/gulpfile.js
similarity index 98%
rename from rd_ui/gulpfile.js
rename to gulpfile.js
index 4355297eb..484f54495 100644
--- a/rd_ui/gulpfile.js
+++ b/gulpfile.js
@@ -9,8 +9,8 @@ var wiredep = require('wiredep').stream;
var runSequence = require('run-sequence');
var yeoman = {
- app: 'app',
- dist: 'dist'
+ app: 'rd_ui/app',
+ dist: 'rd_ui/dist'
};
var paths = {
diff --git a/rd_ui/package.json b/package.json
similarity index 87%
rename from rd_ui/package.json
rename to package.json
index 8a199b7fc..d707c5da8 100644
--- a/rd_ui/package.json
+++ b/package.json
@@ -34,7 +34,8 @@
"scripts": {
"test": "echo 'No tests.'",
"build": "gulp build",
- "bower": "bower"
+ "bower": "bower",
+ "heroku-postbuild": "npm install --dev && npm run bower install && npm run build && npm prune --production"
},
"dependencies": {
}
diff --git a/rd_ui/.bowerrc b/rd_ui/.bowerrc
deleted file mode 100644
index ba0accc5a..000000000
--- a/rd_ui/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "directory": "app/bower_components"
-}
diff --git a/rd_ui/.gitignore b/rd_ui/.gitignore
deleted file mode 100644
index ff422877e..000000000
--- a/rd_ui/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-node_modules
-.tmp
-.sass-cache
-app/bower_components