0

My project has the following structure:

| appengine
|---- app.yaml
|---- myScript.go
| bower_components
|----|...
| build
|----|images
|----|----|branding
|----|----|---- favicon.ico
|----|styles
|----|----|*.css
|----|index.html
| src
| ...

I would like to upload the entire content of the build folder when running goapp deploy appengine.

My app.yaml looks like this:

application: myProject
version: 0-1
runtime: go
api_version: go1

handlers:
- url: /(.*\.(gif|png|jpg|ico|js|css))
  static_files: ../build/\1
  upload: ../build/(.*\.(gif|png|jpg|ico|js|css))

- url: /.*
  script: _go_app

and myScript.go looks like this:

package myProject

import (
    "fmt"
    "io/ioutil"
    "net/http"
)

func init() {
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
    site, err := ioutil.ReadFile("../build/index.html")

    if err != nil {
        panic(err)
    }

    fmt.Fprint(w, string(site))
}

When I run goapp serve appengine, the website displays properly. However, when I try to deploy it, it only clones two files, i.e. the ones inside the appengine folder.

fxlemire
  • 744
  • 5
  • 18
  • I'm not sure you can do that, but even if you could, why complicate things unnecessarily? I mean why do this if everyone else does otherwise? Just put `app.yaml` in the root of your webapp... – icza Feb 05 '16 at 21:19
  • Yeah, this is what I did in order to upload my website, but I really liked the idea of bundling GAE files together in a folder since my root folder is starting to get messy (bower, npm, tsd, etc.). I did not think going up a folder would be that complicated :/ – fxlemire Feb 05 '16 at 21:30
  • symlink the files/directories you want inside your `appengine` dir. They'll be uploaded, but I'm not sure the app will still work, tho... – Dan Cornilescu Feb 05 '16 at 22:24
  • @DanCornilescu It worked!! For both the `serve` and `deploy`. You're a genius, hadn't thought of symlinks at all. Thanks so much!!! Awesome solution :D – fxlemire Feb 07 '16 at 17:44
  • Glad to hear. I made it an answer (and added some other symlink-related pointers that may be of interest) – Dan Cornilescu Feb 08 '16 at 02:49
  • Sure! I wish I could upvote your answer, but unfortunately I don't have enough rep points yet :( Thanks again for your solution! – fxlemire Feb 08 '16 at 21:20

1 Answers1

2

You can preserve your desired app structure with 3rd party code residing outside your GAE app code directory yet still be able to upload the 3rd party code together with your GAE app code by just symlinking the 3rd party code files/dirs inside the GAE app dir in the desired locations.

The GAE upload/deploy utilities know to replace the symlinks and upload the actual files/dirs the symlinks point to instead, in the respective locations.

Some other GAE-related scenarios in which the symlink technique can be applied:

Community
  • 1
  • 1
Dan Cornilescu
  • 37,297
  • 11
  • 54
  • 89