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