cargo build --release e inicia o programa que sai dele. Você envia o código-fonte com o Cargo.toml e o Cargo.lock, sem a pasta target.
src/main.rs
Cargo.toml
Cargo.toml na raiz sobe sem cube.json: a Cube entende que é Rust e cria um bot. Para um site, a memória ou um build próprio, use o cube.json (o command é opcional):
cube.json
Como funciona
- Build:
cargo build --releasea cada envio, com o Rust estável da Cube. O programa vai para/dados/bin/app, fora da pasta do código, e só é trocado quando o build termina: um build que falha deixa o programa de antes. - O que fica guardado: os crates baixados e o que foi compilado (a
target) ficam na pasta do projeto, fora dos Arquivos e dos backups, e contam no espaço dele. O envio seguinte só compila o seu código. Quando oCargo.tomlou oCargo.lockmudam, a compilação recomeça do zero e o cargo baixa de novo só os crates que o projeto usa, para o espaço do projeto não encher com versões velhas. - Bibliotecas já compiladas: as mais usadas vêm prontas, nas versões atuais (a Cube atualiza o cache com as novas) e com as features que o README de cada uma ensina:
tokio,serde,serde_json,reqwest,serenity,poise,twilight,teloxide,axum,actix-web,sqlx,dotenvy,tracing,tracing-subscriber,anyhow,chronoerand. O build usa as prontas quando a versão e as features batem com as do seuCargo.lock; com outras, o cargo compila do zero e o projeto só perde o atalho. Um[profile.release]próprio (lto,opt-level,codegen-units) também compila tudo do zero. - Início: o comando é o programa,
/dados/bin/app. Para passar opções, ponha no comando de início:/dados/bin/app --modo producao. - Vários programas: com
src/bin/, cada programa vai para/dados/bin/<nome>e o dosrc/main.rs(ou o único, ou osrc/bin/app.rs) também é o/dados/bin/app. Com vários programas e nenhum deles nosrc/main.rs, não há/dados/bin/app: o comando de início diz qual roda. Escolha qual roda pelo arquivo principal (src/bin/admin.rsroda o/dados/bin/admin) no Novo projeto ou em Configurações › Geral, ou pelo comando de início. - Build próprio: o
builddocube.jsonvale no lugar do automático (por exemplo,cargo build --release --features prod), e o comando de início aponta para o programa que ele gera (/dados/target/release/<nome>). - O compilador de C, o
pkg-confige o OpenSSL vêm junto: crates com código nativo (oopenssl-sysdoreqwestcomnative-tls, oring) compilam.
Versões e memória
- Rust 1.98 (o compilador 1.98.1, estável). O
rust-toolchain.tomlnão troca o compilador: um que pede o nightly para o build com o motivo no log, e umrust-versionmaior que o da Cube noCargo.tomltambém não compila. O Novo projeto avisa os dois antes do envio. - A memória segue o mínimo do tipo no plano (bot 256 MB nos pagos e 100 MB no Free; site 512 MB). Um programa Rust gasta pouco: o site de teste com o
axumusa uns 15 MB. Num bot, o que mais cresce é o cache doserenity, com os servidores e os membros que ele guarda.
Problemas comuns
could not find Cargo.toml: o .zip não tem oCargo.tomlna raiz. Envie a pasta do projeto.O rust-toolchain.toml pede o Rust nightly: tire o nightly do arquivo (ou o arquivo) e envie de novo. Código com#![feature]não compila no estável.package requires rustc 1.99 or newer: orust-versiondoCargo.toml(ou o de uma dependência) pede um Rust mais novo que o da Cube. Baixe orust-versionou fixe a dependência numa versão anterior noCargo.lock.O projeto não gera nenhum programa: o projeto é só uma biblioteca. Ponha o programa emsrc/main.rs(ou num[[bin]]).install_timeout: o build passou dos 15 minutos. Tire as dependências e as features que o projeto não usa.- O site não responde: o programa não escuta em
0.0.0.0, na porta daPORT. Leiastd::env::var("PORT"), como no exemplo.

