Ernst Wackwitz
Ernst Wackwitz

Reputation: 11

Missing environment variables in OpenShift

I am trying to set up a Python 2.7 project in Openshift. The goal is to use Tornado Websockets. I have tried a number of examples, but I keep getting stuck on a number of missing environment variables that are shown in the examples.

My current app.py:

import imp
import os

try:
   zvirtenv = os.path.join(os.environ['OPENSHIFT_PYTHON_DIR'],
                       'virtenv', 'bin', 'activate_this.py')
                        execfile(zvirtenv, dict(__file__ = zvirtenv) )
except IOError:
   pass

if __name__ == '__main__':
   ip   = os.environ['OPENSHIFT_PYTHON_IP']
   port = int(os.environ['OPENSHIFT_PYTHON_PORT'])
   app = imp.load_source('application', 'main.py')

   app.application.listen(port , ip)
   app.ioloop.IOLoop.instance().start()

My install requires:

  install_requires=['tornado', 'requests', 'beautifulsoup4']

This results in the following error:

---> Running application from Python script (app.py) ...
Traceback (most recent call last):
  File "app.py", line 14, in <module>
    zvirtenv = os.path.join(os.environ['OPENSHIFT_PYTHON_DIR'],
  File "/opt/app-root/lib64/python2.7/UserDict.py", line 40, in __getitem__
    raise KeyError(key)
KeyError: 'OPENSHIFT_PYTHON_DIR'

Can anybody help me out?

Upvotes: 0

Views: 324

Answers (1)

Graham Dumpleton
Graham Dumpleton

Reputation: 58523

You are looking for environment variables set when using OpenShift 2, but are using OpenShift 3. Under OpenShift 3 you do not need to activate the Python virtual environment, it is done for you. Your app.py should listen on all interfaces and on port 8080. That address doesn't change so long as using the default Python S2I builder, so environment variables not used to pass it in.

Upvotes: 1

Related Questions