1
votes

When running flask app on google app engine , it throws me an error that I have to serve my app on port 8080. So I specified the port in

if __name__ == "__main__":
    app.run(port=8080)

But on running it on App engine it shows that my app is still serving on https://127.0.0.1:5000

EDIT : I got confused somewhere on running the app, so I tried running the app locally using dev_appserver.py app.yaml ( this throws an error) On running dev_appserver.py ./ runs the server , but I the page at localhost:8080 is blank , And I get an error in the terminal that it was unable to import python modules even though I have made a appengine_config.py script and a lib subfolder with all the python packages downloaded to it.

My project structure is :

root/ -app.py --lib/ --static/ --templates/ -app.yaml -appengine_config.py

EDIT : The server seems to be running fine now , but it is still unable to import python packages ( I have them installed in the lib folder , also I have used the sys hack ) Here's the error:

Traceback (most recent call last):
  File "/home/padam/Downloads/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/home/padam/Downloads/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "/home/padam/Downloads/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 85, in LoadObject
    obj = __import__(path[0])
  File "/home/padam/Documents/git/gae-fumen/app.py", line 4
    from flask import Flask, render_template, jsonify, request
       ^

How do I fix it ?

2
You need to stop your running server before restarting it…Laurent LAPORTE
Assuming you are developing for the standard environment, you may also want to look at the official Hello World repo - github.com/GoogleCloudPlatform/python-docs-samples/tree/master/…alpeware
@LaurentLAPORTE I didPadam Sethia
@alpeware I did follow that , in that they do not specify if __name__ == "__main__": app.run(port=8080) I also tried without using the above code , it still served on 5000Padam Sethia
what's the entry in your app.yaml? how are you starting the app?Jeffrey Godwyll

2 Answers

1
votes

Unless you're on the flexible runtime, to run standard app engine apps locally, you need to use the dev_appserver. In the root of your project you could run dev_appserver.py ..

With an app.py with the following minimum content:

from flask import Flask

app = Flask(__name__)

# define a few routes here or in app.yaml

@app.route('/')
def home():
    """Root page"""
    return 'home'

You then define how to start your flask application in your project's app.yaml's handlers section:

handlers:
- url: .*
  script: app.app  # a reference to your app object defined in app.py

That should get the app engine setup out of the way. More info on getting started with app engine and flask in the following repo: https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/appengine/standard/flask/hello_world


EDIT: Read more about which environment to run on here

The contents of your app.yaml indicate you're using the flexible runtime. Such as runtime: python and entrypoint:.... If you want to stick with the flexible runtime, that's fine. You'll first have to install your dependencies locally. The preferred method being a virtual environment.

If what you want is app engine standard, based on your file/folder layout, the structure of your app.yaml will be something close to :

runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /.*
  script: app.app

With app engine standard, to use flask you'll then install with pip install flask -t lib to install flask into your lib folder before running the app with dev_appserver.py

0
votes

Create a separate config.py file to config your database and port settings like,

DEBUG = True
PORT = 8000
HOST = "127.0.0.1"
SECRET_KEY = "SOME SECRET"

Now create one more separate file app.py and write below code,

from app import create_app

app = create_app('config')

    if __name__ == '__main__':
        app.run(host=app.config['HOST'],
                port=app.config['PORT'],
                debug=app.config['DEBUG'])

It should work.