diff --git a/.gitignore b/.gitignore
index 7a825080..75ac00c0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,3 +19,7 @@ static/
\#*#
.\#*
+*~*
+
+static/
+secret-key
diff --git a/Makefile b/Makefile
index d50a3aec..513b5af4 100644
--- a/Makefile
+++ b/Makefile
@@ -18,7 +18,7 @@ collectstatic:
$(PY?) $(BASEDIR)/manage.py collectstatic
rsync_upload:
- rsync -P -rvzc -e "ssh -p $(SSH_PORT)" --exclude dynamicweb/local/local_settings.py --exclude .git --exclude .ropeproject --exclude __pycache__ --exclude *.pyc --exclude *~ --exclude *.psd $(BASEDIR) $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) --cvs-exclude
+ rsync -P -rvzc -e "ssh -p $(SSH_PORT)" --exclude dynamicweb/local/local_settings.py --exclude .git --exclude .ropeproject --exclude __pycache__ --exclude *.pyc --exclude *~ --exclude *.psd $(BASEDIR)/* $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) --cvs-exclude
install_debian_packages:
apt-get update && cat $(BASEDIR)/requirements.debian.txt | xargs apt-get install -y --no-install-recommends
diff --git a/README.rst b/README.rst
index 31035103..47700569 100644
--- a/README.rst
+++ b/README.rst
@@ -1,2 +1,4 @@
-Ungleich
+ungleich
========
+
+Website for ungleich GmbH
diff --git a/digitalglarus/templates/digitalglarus/base.html b/digitalglarus/templates/digitalglarus/base.html
index 94e0748b..ffa30f3f 100644
--- a/digitalglarus/templates/digitalglarus/base.html
+++ b/digitalglarus/templates/digitalglarus/base.html
@@ -11,7 +11,7 @@
-
diff --git a/digitalglarus/templates/digitalglarus/contact.html b/digitalglarus/templates/digitalglarus/contact.html
index 9e920db0..dcf66be6 100755
--- a/digitalglarus/templates/digitalglarus/contact.html
+++ b/digitalglarus/templates/digitalglarus/contact.html
@@ -8,7 +8,7 @@
Contact
- DIGITAL.GLARUS
+ DIGITAL GLARUS
@@ -21,7 +21,7 @@
+41 (0) 44 534 66 22
Email:
- digital.glarus@ungleich.ch
+ join@digitalglarus.ch
Address:
Hauptstrasse 14, 8775 Luchsingen
diff --git a/digitalglarus/templates/digitalglarus/index.html b/digitalglarus/templates/digitalglarus/index.html
deleted file mode 100644
index acd7376d..00000000
--- a/digitalglarus/templates/digitalglarus/index.html
+++ /dev/null
@@ -1,105 +0,0 @@
-{% extends "digitalglarus/base.html" %}
-{% load staticfiles %}
-
-{% block content %}
-
-
-
-
-
- Welcome to
-
-
digital.Glarus
-
-
- By
- ungleich gmbh
-
-
-
-
-
-
-
-
-
-
-
Build a tech valley in the heart of switzerland
-
-
-
-
Digital Glarus, this is how we call the new home for high tech companies. Located south of Zurich, it has unique features you can not find anywhere else in Switzerland.
-
The combination of beautiful landscape, recreational areas as well as having high speed Internet connections and huge variety of great food offers forms what we call "Digital Glarus".
-
The valley also knows as "Glarnerland" is featured by many gorgeous, eye-catching buildings from former industrial area.
-
In fact, Glarnerland may be the valley to contain most well preserved antique houses equipped with fitting high quality old age furniture (those you always look at in expensive shops, but never buy - this is how people live here).
-
-
-
-
-
-
-
-
-
-
a new area
-
-
-
While you can imagine that the old factories, many of them being weaving mills, are not business anymore, their heritage suits exactly what the tech society of Switzerland requires: Great and affordable place for computer scientists.
-
Instead of having the old falling apart, we are thinking of building the new tech centre of Switzerland by converting old, abandoned factory halls into attractive working places.
-
But what is attractive to a computer scientist? Pizza, Coke and fast Internet? The latter is a still true, though computer scientists in Switzerland are more orientated on living healthy, which is exactly what Glarnerland can provide.
-
-
-
-
-
-
-
-
-
Why would anyone be interested in it?
-
-
The current de-facto tech centre of Switzerland, Zurich, is overpopulated with an average of less than 0.1% free apartments. Furthermore it is expensive and loud. Although the high concentration of people may be helpful to find customers, most tech companies are making their business in the Internet and are not affected by the change. While you can imagine that the old factories, many of them being weaving mills, are not business anymore, their heritage suits exactly what the tech society of Switzerland requires: Great and affordable place for computer scientists.
-
In fact development is hampered by the costs companies and developers have to carry, distracting them from the real work they plan to do.
-
While some investment is required to be attractive to tech companies, given the potential of reuse of infrastructure, the costs are estimated to be low and can be a key factor in the development of the Canton Glarus.
-
-
-
-
-
-
-
-
how to realize
-
-
At the moment we at ungleich are talking to authorities and sponsors. It is crucial to build up some basic infrastructure and attract early adopters. Building a community (meetup alike) can be helpful, but competitive pricing as well as superior infrastructure are crucial for success.
-
Have you become interested in the project?
-
Contact us at
-
- digital.glarus@ungleich.ch // +41 (0) 44 534 66 22
-
-
-
-
-
-
-
-{% endblock %}
diff --git a/digitalglarus/templates/digitalglarus/index.html-full-index-plus-template b/digitalglarus/templates/digitalglarus/index.html-full-index-plus-template
deleted file mode 100644
index 15628d07..00000000
--- a/digitalglarus/templates/digitalglarus/index.html-full-index-plus-template
+++ /dev/null
@@ -1,214 +0,0 @@
-{% load staticfiles %}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Digital.Glarus - {% block title %}Welcome{% endblock %}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Digital.Glarus
- #1 IT Valley of Switzerland | Luchsingen, 8775 GL Switzerland | From 2015.12.25
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Welcome to
-
-
digital.Glarus
-
-
- By
- ungleich gmbh
-
-
-
-
-
-
-
-
-
-
-
Build a tech valley in the heart of switzerland
-
-
-
-
Digital Glarus, this is how we call the new home for high tech companies. Located south of Zurich, it has unique features you can not find anywhere else in Switzerland.
-
The combination of beautiful landscape, recreational areas as well as having high speed Internet connections and huge variety of great food offers forms what we call "Digital Glarus".
-
The valley also knows as "Glarnerland" is featured by many gorgeous, eye-catching buildings from former industrial area.
-
In fact, Glarnerland may be the valley to contain most well preserved antique houses equipped with fitting high quality old age furniture (those you always look at in expensive shops, but never buy - this is how people live here).
-
-
-
-
-
-
-
-
-
-
a new area
-
-
-
While you can imagine that the old factories, many of them being weaving mills, are not business anymore, their heritage suits exactly what the tech society of Switzerland requires: Great and affordable place for computer scientists.
-
Instead of having the old falling apart, we are thinking of building the new tech centre of Switzerland by converting old, abandoned factory halls into attractive working places.
-
But what is attractive to a computer scientist? Pizza, Coke and fast Internet? The latter is a still true, though computer scientists in Switzerland are more orientated on living healthy, which is exactly what Glarnerland can provide.
-
-
-
-
-
-
-
-
-
Why would anyone be interested in it?
-
-
The current de-facto tech centre of Switzerland, Zurich, is overpopulated with an average of less than 0.1% free apartments. Furthermore it is expensive and loud. Although the high concentration of people may be helpful to find customers, most tech companies are making their business in the Internet and are not affected by the change. While you can imagine that the old factories, many of them being weaving mills, are not business anymore, their heritage suits exactly what the tech society of Switzerland requires: Great and affordable place for computer scientists.
-
In fact development is hampered by the costs companies and developers have to carry, distracting them from the real work they plan to do.
-
While some investment is required to be attractive to tech companies, given the potential of reuse of infrastructure, the costs are estimated to be low and can be a key factor in the development of the Canton Glarus.
-
-
-
-
-
-
-
-
how to realize
-
-
At the moment we at ungleich are talking to authorities and sponsors. It is crucial to build up some basic infrastructure and attract early adopters. Building a community (meetup alike) can be helpful, but competitive pricing as well as superior infrastructure are crucial for success.
-
Have you become interested in the project?
-
Contact us at
-
- digital.glarus@ungleich.ch // +41 (0) 44 534 66 22
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/digitalglarus/templates/digitalglarus/index.html-orig b/digitalglarus/templates/digitalglarus/index.html-orig
deleted file mode 100644
index 85bd3198..00000000
--- a/digitalglarus/templates/digitalglarus/index.html-orig
+++ /dev/null
@@ -1,23 +0,0 @@
-
-{% extends "base.html" %}
-
-
-{% if error_message %}{{ error_message }}
{% endif %}
-
-
-
-{% if message_list %}
-
- {% for message in message_list %}
- {{ message }}
- {% endfor %}
-
-{% else %}
- No messages are available.
-{% endif %}
-
-
diff --git a/docs/hosting_app_spec.rst.txt b/docs/hosting_app_spec.rst.txt
new file mode 100644
index 00000000..e3366b32
--- /dev/null
+++ b/docs/hosting_app_spec.rst.txt
@@ -0,0 +1,193 @@
+=====================================
+Ungleich Hosting WebApp Specification
+=====================================
+
+Author: Raul Ascencio
+Contact: raul.ascencio@ungleich.ch
+Version: 0.1
+Date: 2015-06-11
+Copyright © ungleich GmbH 2015
+
+-----
+Terms
+-----
+
+User
+ The end-user, person/entity who books/use one or more vm's.
+
+Ungleich
+ The company agents/users the creators and admins ofr the ungleich hosting
+ webapp.
+
+--------
+Overview
+--------
+
+Ungleich hosting is a Plataform as a Service (PaaS) for multiple application
+stack, offers multiple languages (ruby, python, javascript {node,io}.js),
+application servers and databases.
+
+Ungleich hosting let the user focus on being more productive, without having
+to worry about the complexities of maintaining a production enviroment.
+
+**This spec is not complete**, in fact it hasn't even be reviewed once, it
+probably needs a couple of revisions to be accepted.
+
+What the ungleich plataform offers:
+
+- Stack management.
+- Monitoring and alerting.
+- High availability.
+- Automatic aplication deployment.
+- Ready to use stacks.
+- Automated Management.
+- User Access Management [?].
+- Production Ready Services (Postgresql, Memcached, Redis...).
+- Backups and redundancy.
+- Full management and support for stack-related issues [?]
+
+Avilable stacks:
+
+**Ruby Stack**
+
+- Load balancers:
+ - HAProxy
+- Frameworks:
+ - Ruby on Rails
+ - ...
+- Web Servers:
+ - NGINX
+ - ...
+- Application Servers:
+ - Unicorn
+ - Passenger
+ - Puma [?]
+- Databases:
+ - Postgresql
+ - Mysql [?]
+ - Mongodb [?]
+- Caching:
+ - Memcached [?]
+ - Redis (people often use it for other things and it's nice to have) [?]
+- Misc:
+ - Preinstalled gems (sidekiq/resque, )
+
+**Python Stack**
+
+- << Inserts Ruby Stack and replace:
+- Application Servers:
+ - Gunicorn
+ - uWSGI
+- Frameworks:
+ - Django
+ - ...
+- Misc:
+ - Celery/Gearman
+ - ...
+
+**Node Stack**
+
+- << Inserts Ruby Stack and replace:
+- Frameworks:
+ - Express
+ - Meteor
+ - Hoodie
+- Databases:
+ - ...
+ - Couchdb (Hoodie)
+- Misc:
+ - npm
+ - pm2
+ - browserify/requirejs/webpack
+ - ...
+
+Brief summary of how it works:
+
+1. The *User* goes to an Ungleich Hosting website to register.
+2. Once logged in, the *User* get asked for his/her billing information to start
+ booking machines.
+3. After the *User* inserts a 'valid' credit card he books a VM.
+4. When a VM is booked the *User* is subscribed to a 'plan' that it's related
+ with the VM specs.
+ a. User can be asked for a public SSH key, this key can be used to access
+ to the server.
+5. The subscription gets confirmed, *Ugleich* deploy the requested infrastructure
+ and stack.
+6. *User* is notified that the new VM is ready to use.
+7. The *User* access the new VM and deploys the Application.
+
+-----------------------
+Ungleich Hosting - Goal
+-----------------------
+
+ As ungleich, we want to offer "Application Hosting" - pre-configured VMs plus
+ support for the technologies running on them, the VMs should be "clickable"
+ as in self service mid term.
+
+--------------------------
+Ungleich Hosting - Phase 0
+--------------------------
+
+This phase will deliver a fully functional webpage for railshosting, without the
+capabilities of the 'ungleich hosting app', except from selecting an stack
+ordering it by email and the user being subscribed to a plan (billing).
+This phase will
+
+Where this phase come from:
+
+ + ...for the moment, it is enough if we generate a mail for every order
+ + get rails-hosting.ch running so that somebody can order a VM including
+ payment
+
+*********
+Non Goals
+*********
+
++ The VMs should be "clickable" as in self service.
++ End-User interface to manage their VMs.
+
+************
+Requirements
+************
+
+#. Feature
+ Description
+
+1. *Ungleich* provides a service overview page
+2. *Ungleich* provides a sign up page for users who want to
+ try the private beta of the service
+3. *Ungleich* let *Users* upload their public SSHs keys
+4. *Users* can subscribe to their choosen hosting plan.
+5. Notify *Users* when their VMs are ready.
+6. *Users* can access to their VMs using the uploaded SSHs keys.
+7. *Users* can view their billing history.
+8. *Users* are capable of canceling their plans.
+9. *Users* are notified every time a new invoice is sucefully charged.
+10. *Users* are notified every time their invoices fail to charge.
+11. *Users* can add credit cards to their accounts.
+12. *Users* can see a detail of every invoice.
+13. *Users* can create multiple VMs.
+14. *Users* can choose what SSHs keys will use for every VM.
+15. *Users* can see the recent history of access to their VMs [?]
+16. *Users* can edit their profiles.
+17. *Users* can submit tickets to *Ungleich*
+18. *Users* can configure DNS settings.
+19. *Ungleich* can see the list of *Users*.
+20. *Ungleich* can browse the VMs of all *Users*.
+21. *Ungleich* is notified everytime an invoice fail to charge.
+22. *Ungleich* provide help pages for every section of the site.
+
+*******
+Details
+*******
+
+...
+
+--------------------------
+Ungleich Hosting - Phase 1
+--------------------------
+
+This phase will deliver the foundations for most of the ungleich hosting app capabilities.
+
+
+ for the moment, it is enough if we generate a mail for every order
diff --git a/dynamicweb/settings.py b/dynamicweb/settings.py
index 9f127984..1db559c5 100644
--- a/dynamicweb/settings.py
+++ b/dynamicweb/settings.py
@@ -27,15 +27,20 @@ LOGIN_URL = None
LOGOUT_URL = None
LOGIN_REDIRECT_URL = None
-# SECURITY WARNING: keep the secret key used in production secret!
-SECRET_KEY = 'xlhyv_l5-z6e8_@q6)n0up1a0$5-aad7d)om2t8g$bi6*@q44i'
+EMAIL_HOST="localhost"
+EMAIL_PORT=25
+
+SECRET_KEY_FILE = os.path.join(BASE_DIR, "secret-key")
+with open(SECRET_KEY_FILE, "r") as f:
+ SECRET_KEY = f.read().strip()
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
ALLOWED_HOSTS = [
".ungleich.ch",
- "digital.glarus.ungleich.ch" ]
+ "digital.glarus.ungleich.ch" ,
+]
# Application definition
@@ -88,6 +93,7 @@ INSTALLED_APPS = (
'ungleich',
'railshosting',
'digitalglarus',
+ 'djangocms_page_meta',
)
MIDDLEWARE_CLASSES = (
@@ -226,7 +232,25 @@ CMS_PLACEHOLDER_CONF = {
}
}
],
- }
+ },
+ 'content': {
+ 'name' : _('Content'),
+ 'default_plugins':[
+ {
+ 'plugin_type':'TextPlugin',
+ 'values':{'body':'
'},
+ },
+ ]
+ },
+ 'post_content': {
+ 'name' : _('Content'),
+ 'default_plugins':[
+ {
+ 'plugin_type':'TextPlugin',
+ 'values':{'body':'
'},
+ },
+ ]
+ },
}
CACHES = {
@@ -250,8 +274,6 @@ if LOGOUT_URL is None:
if LOGIN_REDIRECT_URL is None:
LOGIN_REDIRECT_URL = APP_ROOT_ENDPOINT
-
-
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.7/howto/static-files/
@@ -319,6 +341,89 @@ TEXT_SAVE_IMAGE_FUNCTION='cmsplugin_filer_image.integrations.ckeditor.create_ima
TEXT_ADDITIONAL_TAGS = ('iframe',)
TEXT_ADDITIONAL_ATTRIBUTES = ('scrolling', 'allowfullscreen', 'frameborder')
USE_X_FORWARDED_HOST = True
+
+# Django Bootstrap - Settings
+# Added Configuration for bootstrap static files to load over https.
+BOOTSTRAP3 = {
+
+ # The URL to the jQuery JavaScript file
+ 'jquery_url': '//code.jquery.com/jquery.min.js',
+
+ # The Bootstrap base URL
+ 'base_url': '//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/',
+
+ # The complete URL to the Bootstrap CSS file (None means derive it from base_url)
+ 'css_url': None,
+
+ # The complete URL to the Bootstrap CSS file (None means no theme)
+ 'theme_url': None,
+
+ # The complete URL to the Bootstrap JavaScript file (None means derive it from base_url)
+ 'javascript_url': None,
+
+ # Put JavaScript in the HEAD section of the HTML document (only relevant if you use bootstrap3.html)
+ 'javascript_in_head': False,
+
+ # Include jQuery with Bootstrap JavaScript (affects django-bootstrap3 template tags)
+ 'include_jquery': False,
+
+ # Label class to use in horizontal forms
+ 'horizontal_label_class': 'col-md-3',
+
+ # Field class to use in horizontal forms
+ 'horizontal_field_class': 'col-md-9',
+
+ # Set HTML required attribute on required fields
+ 'set_required': True,
+
+ # Set HTML disabled attribute on disabled fields
+ 'set_disabled': False,
+
+ # Set placeholder attributes to label if no placeholder is provided
+ 'set_placeholder': True,
+
+ # Class to indicate required (better to set this in your Django form)
+ 'required_css_class': '',
+
+ # Class to indicate error (better to set this in your Django form)
+ 'error_css_class': 'has-error',
+
+ # Class to indicate success, meaning the field has valid input (better to set this in your Django form)
+ 'success_css_class': 'has-success',
+
+ # Renderers (only set these if you have studied the source and understand the inner workings)
+ 'formset_renderers':{
+ 'default': 'bootstrap3.renderers.FormsetRenderer',
+ },
+ 'form_renderers': {
+ 'default': 'bootstrap3.renderers.FormRenderer',
+ },
+ 'field_renderers': {
+ 'default': 'bootstrap3.renderers.FieldRenderer',
+ 'inline': 'bootstrap3.renderers.InlineFieldRenderer',
+ },
+}
+
+# djangocms_blog config
+
+BLOG_ENABLE_COMMENTS = False
+BLOG_USE_PLACEHOLDER = True
+BLOG_IMAGE_THUMBNAIL_SIZE = {'size': '120x120', 'crop': True,'upscale': False}
+BLOG_IMAGE_FULL_SIZE = {'size': '640x120', 'crop': True,'upscale': False}
+BLOG_PAGINATION = 4
+BLOG_LATEST_POSTS = BLOG_PAGINATION
+BLOG_POSTS_LIST_TRUNCWORDS_COUNT = 100
+BLOG_MULTISITE = True
+BLOG_AUTHOR_DEFAULT = True
+
+#django-meta
+META_SITE_PROTOCOL = "https"
+META_SITE_DOMAIN = "ungleich.ch"
+META_SITE_TYPE = "website"
+META_SITE_NAME = "ungleich"
+META_INCLUDE_KEYWORDS = ["ungleich", "hosting", "switzerland", "Schweiz", "Swiss", "cdist"]
+META_USE_SITES = True
+
try:
from .local.local_settings import *
except ImportError as e:
diff --git a/railshosting/djangohosting.css b/railshosting/djangohosting.css
new file mode 100644
index 00000000..aae58ef6
--- /dev/null
+++ b/railshosting/djangohosting.css
@@ -0,0 +1,6 @@
+@charset "UTF-8";
+/* CSS Document */
+
+.intro-header {
+ background: url(../img/django-intro-bg.png) no-repeat center center;
+}
\ No newline at end of file
diff --git a/railshosting/templates/railshosting/base.html b/railshosting/templates/railshosting/base.html
new file mode 100644
index 00000000..63a33048
--- /dev/null
+++ b/railshosting/templates/railshosting/base.html
@@ -0,0 +1,387 @@
+{% load staticfiles %}
+
+
+
+
+
+
+
+
+
+
+
+
+ {% block title %} {%endblock%} as easy as possible
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% block customcss %} {%endblock%}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
How it works :
+ {% block specification %}
+ {% endblock %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Option 1 : Your own infrastructure
+
We configure your own infrastructure for {{ hosting_long }}. Keep the comfort and safety of being at your home, while we set things up for you.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Option 2 : Our infrastructure
+
We take care of everything for you! You don't need your infrastructure. We give you everything you need in {{ hosting_long }}ls hosting. Full root access, 24x7 support.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Hosting Price Samples
+
Here are samples of our {{ hosting_long }} hosting offers, suited for different projects. Our offer examples come in different size, speed, and storage.
+
+
+
+
+
+
+
+
+
+
+
+
+
Economy
+
Suited for smaller applications
+
1 core,
+
1 GiB RAM,
+
10 GiB system image (25 CHF)
+
+ Buy Now! More Info
+
+
+
+
+
+
+
+
+
Standard
+
Suited for standard {{ hosting_long }} applications
+
1 core,
+
2 GiB RAM,
+
10 GiB system image (30 CHF)
+
+ Buy Now! More Info
+
+
+
+
+
+
+
+
+
+
Deluxe
+
Suited for performance critical project
+
2 cores,
+
4 GiB Ram,
+
10 GiB system image (50 CHF)
+
+ Buy Now! More Info
+
+
+
+
+
+
+
+
+
Presidential Premium
+
Suited for performance critical &
+
high storage demand projects
+
4 Cores, 8 GiB RAM, 10 GiB System image,
+
100 GiB Data image (190 CHF)
+
+ Buy Now! More Info
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
QUESTIONS?
+
CONTACT US!
+
ungleich GmbH
+
{{ email }}
+
14 Hauptstrasse Luchsingen 8775
+
Switzerland
+
+
+
+ Twitter
+
+
+ Github
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Copyright © ungleich GmbH 2015. All Rights Reserved
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/railshosting/templates/railshosting/django.html b/railshosting/templates/railshosting/django.html
new file mode 100644
index 00000000..df2cf991
--- /dev/null
+++ b/railshosting/templates/railshosting/django.html
@@ -0,0 +1,18 @@
+{% extends "railshosting/base.html" %}
+{% load staticfiles %}
+
+{% block title %}django hosting.ch - django hosting{%endblock%}
+
+{%block customcss %}
+
+{%endblock%}
+
+{%block specification %}
+
+ Ubuntu 14.04 as the operating system, full root access!
+
+ nginx as the frontend Server (optional with SSL Support)
+ uwsgi to have your application talk to nginx and vice versa
+
PostgreSQL as the database
+
+{%endblock%}
\ No newline at end of file
diff --git a/railshosting/urls.py b/railshosting/urls.py
index 6d978854..97e91151 100644
--- a/railshosting/urls.py
+++ b/railshosting/urls.py
@@ -5,4 +5,5 @@ from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'beta$', views.beta, name='beta'),
+ url(r'djangohosting$', views.djangohosting, name='djangohosting'),
]
diff --git a/railshosting/views.py b/railshosting/views.py
index cc0a2909..16264cfe 100644
--- a/railshosting/views.py
+++ b/railshosting/views.py
@@ -29,5 +29,28 @@ def index(request):
return render(request, 'railshosting/index.html', context)
+def djangohosting(request):
+ context = {}
+
+ context["hosting"]="django"
+ context["hosting_long"]="Django"
+ context["domain"]="django-hosting.ch"
+ context["google_analytics"]="the right id"
+ context["email"]="info@django-hosting.ch"
+
+ return render(request, 'railshosting/django.html', context)
+
+
+def railshosting(request):
+ context = {}
+
+ context["hosting"]="rails"
+ context["hosting_long"]="Ruby On Rails"
+ context["domain"]="rails-hosting.ch"
+ context["google_analytics"]="the right id"
+ context["email"]="info@rails-hosting.ch"
+
+ return render(request, 'railshosting/rails.html', context)
+
def beta(request):
return render(request, 'railshosting/beta.html')
diff --git a/requirements.txt b/requirements.txt
index 9abdc6d3..0bff54f0 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -50,3 +50,6 @@ circus-web
chaussette
meinheld
gevent
+
+# djangocms-page-meta
+djangocms-page-meta
diff --git a/stable_requirements.txt b/stable_requirements.txt
index 14fbc716..43449355 100644
--- a/stable_requirements.txt
+++ b/stable_requirements.txt
@@ -45,10 +45,11 @@ djangocms-table==1.2
cmsplugin-filer==0.10.1
# production
-circus==0.11.1
+-e git+git@github.com:circus-tent/circus.git@dfdb72baf87fbd03941f730d1ef05f3d5b8e91e9#egg=circus-master
circus-web==0.5
chaussette==1.2
meinheld==0.5.7
+gevent==1.0.2
## The following requirements were added by pip freeze:
aldryn-blog==0.4.6
aldryn-boilerplates==0.7
diff --git a/templates/cms/ungleich.ch/base.html b/templates/cms/ungleich.ch/base.html
index 1299ba10..13560590 100644
--- a/templates/cms/ungleich.ch/base.html
+++ b/templates/cms/ungleich.ch/base.html
@@ -1,13 +1,18 @@
{% load cms_tags menu_tags sekizai_tags staticfiles bootstrap3 %}
+
- {% page_attribute "page_title" %}
+
+ {% block title %}
+ {% page_attribute "page_title" %}
+ {% endblock %}
+
{% addtoblock "external-css" %}
{% bootstrap_css %}
-
-
-
+
+
@@ -23,6 +28,12 @@
rel="stylesheet" medial="all" />
{% endaddtoblock %}
+ {% block meta %}
+
+
+ {% include 'meta.html' %}
+ {% endblock %}
+
{% render_block "external-css" %}
{% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %}
diff --git a/templates/djangocms_blog/post_detail.html b/templates/djangocms_blog/post_detail.html
index e917bd36..30b14b9f 100644
--- a/templates/djangocms_blog/post_detail.html
+++ b/templates/djangocms_blog/post_detail.html
@@ -5,7 +5,7 @@
{% block meta_description %}{{ post.meta_description }}{% endblock meta_description %}
{% block meta_keywords %}{{ post.meta_keywords }}{% endblock meta_keywords %}
{% block canonical_url %} {% endblock canonical_url %}
-{% block title %}{{ post.get_title }}{% endblock %}
+{% block title %}{% page_attribute "page_title" %} - {{ post.get_title }}{% endblock %}
{% block base_header %}
{% include "djangocms_blog/_header_post_detail.html" %}