pythonamazon-elastic-beanstalkbottle

Can't load static files with bottle on elastic beanstalk


After some help, I got my bottle application running with Elastic Beanstalk. Well almost - I still can't see any static files. I have followed the instructions here by inserting a file called python.conf in directory .ebextensions with this in it:

option_settings:
  "aws:elasticbeanstalk:container:python:staticfiles":
    "/static/": "static/"

Unfortunately that did not work. My files are in folders under /static (for example, /static/js, /static/css etc). In my bottle application, I was serving static files as per the answer here, like this:

@route('/static/:path#.+#')
def server_static(path):
    return static_file(path, root='./static')

It all works when I run it locally. Does anyone know what I'm doing wrong? Should I be following a different procedure because my static files are in subfolders, or because I'm using bottle instead of flask? I'm aware of a similar question that has been asked here for flask, but there has been no answer (and for all I know it could be a totally different issue). Thanks a lot, Alex


Solution

  • I'm sure it isn't the most elegant solution, but I solved this by putting all of my static files in an S3 bucket and using that in all of my pages.

    I didn't really have that many static files to begin with so it wasn't a very big deal. I just made a variable of the S3 bucket url:

    S3Static = r'mystaticbucket.s3-us-west-2.amazonaws.com'

    Passed it to my bottle templates, and changed the links from:

    <link rel="stylesheet" type="text/css" href = "/static/css/MarmoStyle.css" >

    to

    <link rel="stylesheet" type="text/css" href = "{{S3Static}}/static/css/Style.css">

    (ie just added {{S3Static}} before the path) If you're using a static file in a separate %included header template like I am, you have to pass the S3Static variable to the template like this:

    %include header.tpl S3Static=S3Static

    And that was about it. I know this won't be an ideal solution for everyone and there are probably better ways to do it, but it's worked for me so far. Thanks, Alex