Running your application locally requires a Development Rack to be installed.
Starting Your Application
Once you have a Development Rack, you can go to the directory containing your application code and run
$ convox start build | uploading source build | starting build build | Authenticating registry.dev.convox/convox: Login Succeeded build | Building: . build | Sending build context to Docker daemon 114.4MB build | Step 1/5 : FROM golang:1.13 AS development build | ---> 272e3f68338f build | Step 2/5 : ENV DEVELOPMENT=true build | ---> 8323381038aa build | Step 3/5 : COPY . . build | ---> e87c93ad5c25 build | Step 4/5 : RUN go install ./cmd/web build | ---> 0be9da9a42c6 build | Step 5/5 : CMD ["bin/development", "web"] build | ---> e87c93ad5c25 build | Successfully built e87c93ad5c25 build | Successfully tagged 66608a93037391937ae7bdd4e148189d1369d38e:latest build | Running: docker tag 66608a93037391937ae7bdd4e148189d1369d38e dev/myapp:web.BABCDEFGHI build | Running: docker tag dev/myapp:web.BABCDEFGHI registry.dev.convox/myapp:web.BABCDEFGHI build | Running: docker push registry.dev.convox/myapp:web.BABCDEFGHI convox | starting sync from . to . on web web | Scaled up replica set web-786b6d8f5d to 1 web | Created pod: web-786b6d8f5d-l9jd2 web | Successfully assigned dev-convox/web-786b6d8f5d-l9jd2 to docker-desktop web | Container image "registry.dev.convox/myapp:web.BABCDEFGHI" already present on machine web | Created container main web | make: '/go/bin/web' is up to date. web | ns=web at=listen hostname="web.convox" proto="https" addr=":3000"
Convox automatically synchronizes your local changes up to the Development Rack so that you can work using your favorite editor.
All files or directories that appear in a
ADD directive in your
Dockerfile will be
Files or directories that appear in
.dockerignorewill not be synchronized.
You can use a build target named
development in your
Dockerfile to work locally on an application that will be
later compiled to a binary and have its source code removed before deploying to production.
FROM golang:1.13 AS development ENV DEVELOPMENT=true COPY . . RUN go install ./cmd/web CMD ["bin/development", "web"] FROM ubuntu:18.04 as production ENV DEVELOPMENT=false COPY --from=development /go/bin/web /app/web CMD ["/app/web"]
In this example during
convox start only the first section of the Dockerfile will be run. This allows you to
work in a container that contains the full source code where you can set
CMD to a script that automatically
recompiles and reloads the application when the source code is changed.
When deploying to production the entire Dockerfile would be run and you would end up with a bare
with only the compiled binary copied into it.