mix.exs (as de produção), roda o mix compile e sobe o projeto com o mix run --no-halt. Você envia o código-fonte, sem as pastas deps e _build.
lib/site.ex
mix.exs
cube.json
mix.exs na raiz sobe sem cube.json: a Cube entende que é Elixir e cria um bot. Para um site, a memória ou um build próprio, use o cube.json (o command é opcional).
Como funciona
- Dependências:
mix deps.get --only prodquando omix.exsou omix.lockmudam. As dependências e o que foi compilado ficam na pasta do projeto, fora do código, e contam no espaço dele: um envio novo só compila o que mudou. O compilador de C vem junto, então dependências nativas como obcrypt_elixire oexqliteinstalam, e as que vêm de um repositório Git também. - Build: o
mix compilea cada envio, sempre em produção (MIX_ENV=prod, no build e no início). - Início:
mix run --no-haltsobe a aplicação domix.exs: o seu bot ou site precisa estar na árvore de supervisão doapplication(omod:do exemplo). Um arquivo.exscomo arquivo principal roda depois dela (mix run --no-halt priv/start.exs). Um.exnão serve de arquivo principal: os.exdalibsão o que omix compilecompila, e sobem pela aplicação. - Build próprio: o
builddocube.jsonvale no lugar domix compile, depois domix deps.get.
Phoenix
cube.json
- O Phoenix sobe o servidor pelo
mix run --no-halt: a variávelPHX_SERVERjá vem comotrue, e oconfig/runtime.exsque omix phx.newgera lê a porta daPORT. - Ponha em Variáveis de ambiente o
SECRET_KEY_BASE(gere commix phx.gen.secret), oPHX_HOSTcom o endereço do site (comomeu-site.cubehost.dev: sem ele, o LiveView recusa a conexão) e oDATABASE_URL, se usar o Ecto. - Com assets, o
builddo exemplo compila e gera os arquivos doesbuilde dotailwind.
Versões e memória
- Elixir 1.20 (com o Erlang/OTP 29). Um
elixir: "~> 1.15"nomix.exsroda nele. - A memória segue o mínimo do tipo no plano (bot 256 MB nos pagos e 100 MB no Free; site 512 MB). Só o
mix runcom o Erlang usa uns 90 MB para subir: no Free sobra pouco, e um bot de verdade precisa de um plano pago. - O Erlang não fica girando à toa esperando trabalho (
ERL_FLAGSvem com+sbwt none +sbwtdcpu none +sbwtdio none); uma variávelERL_FLAGSsua vale no lugar.
Problemas comuns
** (Mix) Cannot execute "mix run" without a Mix.Project: o .zip não tem omix.exsna raiz. Envie a pasta do projeto Mix.environment variable SECRET_KEY_BASE is missing(Phoenix): ponha oSECRET_KEY_BASEnas variáveis de ambiente.- O site não responde: o servidor não ouve na porta da
PORT. LeiaSystem.get_env("PORT")nostart(no Phoenix, noconfig/runtime.exs) e confira se ele está noschildrendoapplication.

