用途
该技能用于创建和配置 Railway 项目、服务与数据库,覆盖从零初始化到向已有项目添加服务的完整流程。当用户说出「setup」「deploy to railway」「initialize」「create project」「link to railway」「create a service」「add a backend」「add postgres」等意图时触发。
前置检查
- 检查 CLI 是否安装:
command -v railway。未安装时提示npm install -g @railway/cli或brew install railway。 - 检查登录状态:
railway whoami --json。未登录时运行railway login。
决策流程
- 在当前目录运行
railway status --json。 - 若已链接:默认行为是把服务添加到现有项目,不新建项目,除非用户明确说「new project」「create a project」「init a project」「separate project」。应用名(如 flappy-bird、my-api)属于服务名而非项目名。
- 若未链接:检查父目录
cd .. && railway status --json。父目录已链接时,无需为子目录初始化或链接,而是railway add --service <name>、通过环境技能设置 rootDirectory,再从根目录railway up。 - 若任何层级都未链接:执行初始化或链接流程。
初始化与链接
- 查询用户项目:
railway list --json,建议在子代理中运行并只提取项目 id、名称、workspace id 与名称。 - 用户明确说「new project」→
railway init。 - 用户指定已有项目名 →
railway link。 - 目录名与已有项目匹配 → 询问是链接已有还是新建。
- 无匹配项目 →
railway init。 - 存在歧义 → 询问用户。
新建项目:railway init -n <name>,可用 -n/--name 指定名称,-w/--workspace 指定工作区(存在多个工作区时必需)。工作区 ID 可从 railway whoami --json 的 workspaces 数组获取,支持按用户表述匹配工作区名称。
链接已有项目:railway link -p <project>,可选 -e/--environment(默认 production)、-s/--service、-t/--team。
创建服务
项目链接后:railway add --service <name>。
若来源为 GitHub 仓库:先创建空服务,再调用 railway-environment 技能通过 staged changes API 配置来源,不使用 railway add --repo(它依赖 GitHub app 集成,常失败)。流程为 railway add --service my-api、调用环境技能设置 source.repo 与 source.branch、应用变更以触发部署。
按项目类型配置
构建配置参考 railpack.md,单体仓库模式参考 monorepo.md。
- 静态站点(Vite、CRA、Astro static):Railpack 自动检测常见输出目录 dist、build;非标准输出目录时通过环境技能设置
RAILPACK_STATIC_FILE_ROOT;不使用 railway variables CLI。 - Node.js SSR(Next.js、Nuxt、Express):确认 package.json 中存在 start 脚本;需要自定义启动时通过环境技能设置 startCommand。
- Python(FastAPI、Django、Flask):确认存在 requirements.txt 或 pyproject.toml,通常无需配置。
- Go:确认 go.mod 存在,通常无需配置。
单体仓库配置
关键区分根目录与自定义命令:
- 隔离型单体仓库(应用不共享代码):将 Root Directory 设为应用子目录(如 /frontend),构建时仅该目录代码可用。
- 共享型单体仓库(TypeScript workspaces、共享包):不设置根目录,改用自定义构建/启动命令过滤包,如
pnpm --filter <package> build、npm run build --workspace=packages/<package>、yarn workspace <package> build、turbo run build --filter=<package>;并设置 watch paths 避免不必要的重建。
项目脚手架引导
分析代码库以确认 Railway 兼容性:package.json 表示 Node.js,requirements.txt/pyproject.toml 表示 Python,go.mod 表示 Go,Cargo.toml 表示 Rust,index.html 表示静态站点,均无则引导脚手架。单体仓库检测依据:pnpm-workspace.yaml 表示 pnpm workspace,package.json 含 workspaces 字段表示 npm/yarn workspace,turbo.json 表示 Turborepo,多个子目录各有独立 package.json 且无 workspace 配置表示隔离型单体仓库。
无代码时提示的最小模式示例:静态站点创建根目录 index.html;Vite React 使用 npm create vite@latest . -- --template react;Astro 使用 npm create astro@latest;Python FastAPI 创建 main.py 与 requirements.txt;Go 创建监听 PORT 环境变量的 HTTP 服务 main.go。
数据库
添加 Postgres、Redis、MySQL、MongoDB 时使用 railway-railway-database 技能,由它处理创建数据库服务、连接变量引用以及将服务接入数据库。
组合使用
服务创建后:用 railway-deploy 技能推送代码;高级配置用 railway-environment 技能(buildCommand、startCommand);域名用 railway-domain 技能;状态检查用 railway-status 技能;服务操作(重命名、删除、状态)用 railway-service 技能。
错误处理
- CLI 未安装:提示安装命令。
- 未认证:运行
railway login。 - 无工作区:在 railway.com 创建或验证认证。
- 项目名已被占用:链接已有
railway link -p <name>或换名railway init -n <other-name>。 - 服务名已被占用:换名
railway add --service <other-name>。
示例
- 创建 HTML 静态站点:检查状态未链接 →
railway init -n my-site→ 引导创建 index.html →railway add --service my-site→ 无需配置(根目录 index.html 自动检测)→ 用 deploy 技能railway up→ 用 domain 技能获取公开 URL。 - 创建 Vite React 服务:检查状态已链接(或先初始化/链接)→
npm create vite@latest frontend -- --template react→railway add --service frontend→ 无需配置(Vite dist 输出自动检测)→ 用 deploy 技能。 - 添加 Python API:状态已链接 → 引导创建 FastAPI 的 main.py 与 requirements.txt →
railway add --service api→ 无需配置 → 用 deploy 技能。 - 链接并添加服务:
railway list --json找到 backend →railway link -p backend→railway add --service worker→ 按 worker 类型引导设置。 - 模糊的 deploy to railway:状态未链接、list 有项目、目录名 my-app 匹配到项目 my-app → 询问链接还是新建 → 用户选链接 →
railway link -p my-app→ 询问是否为该代码创建服务。 - 隔离型单体仓库添加服务:/frontend 有独立 package.json 且无 workspace 配置 →
railway add --service frontend→ 环境技能设置 rootDirectory: /frontend → watch paths: /frontend/**。 - 共享型单体仓库添加 api 包:存在 turbo.json 与 pnpm-workspace.yaml → 引导创建 packages/api →
railway add --service api→ 环境技能设置 buildCommand 与 startCommand(不设 rootDirectory)→ watch paths: /packages/api/、/packages/shared/。 - 部署 pnpm workspace 包:存在 pnpm-workspace.yaml →
railway add --service backend→ 环境技能设置 buildCommand 与 startCommand → 设置后端及共享依赖的 watch paths。 - 部署已链接项目的子目录:CWD 为 ~/projects/my-project/my-app,父目录已链接 → 不初始化子目录 →
bun create vite my-app --template react-ts→cd my-app && bun install→railway add --service my-app→ 环境技能设置 rootDirectory: /my-app → 从根目录railway up。
限制
资料未提供该技能的收费、定价、平台覆盖范围、性能指标或效果数据;相关事实暂未提供。