You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions中Railway CLI部署失败:"Project Token not found"问题排查

问题描述

尝试通过GitHub Actions将Django后端部署至Railway时,使用Railway CLI持续遇到Project Token not found错误,参照官方文档尝试多种方案均未成功,具体疑问如下:

  1. 在GitHub Actions这类非交互式环境中,使用Railway CLI进行认证与部署的正确方式是什么?
  2. 如何将环境变量正确传递至Railway CLI容器?
  3. 是否需要遵循特定的操作顺序(如先关联项目再部署)?
  4. 最新版本的Railway CLI在CI环境中是否存在已知问题?

环境信息

  • GitHub Actions工作流
  • Railway CLI(最新版本)
  • Django后端应用

已尝试的方案

  1. 直接使用CLI
- run: railway link ${{ secrets.RAILWAY_PROJECT_ID }}

错误:error: unexpected argument found
分析:railway link不接受项目ID作为位置参数。

  1. 令牌文件认证
- run: |
    echo ${{ secrets.RAILWAY_TOKEN }} > railway.token
    railway login --token-file railway.token

错误:error: unexpected argument '--token-file' found
分析:railway login不支持--token-file参数。

  1. 管道令牌登录
- run: echo ${{ secrets.RAILWAY_TOKEN }} | railway login

错误:Cannot login in non-interactive mode
分析:railway login仅支持交互式输入,不适用于CI环境。

  1. 仅使用环境变量
env:
  RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
- run: railway up --service=bioreactlab-backend

错误:Project Token not found
分析:缺少显式关联项目的步骤。

  1. 官方容器方案
container: ghcr.io/railwayapp/cli:latest
env:
  SVC_ID: bioreactlab-backend
  RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
steps:
  - uses: actions/checkout@v3
  - run: railway up --service=${{ env.SVC_ID }}
    working-directory: backend

错误:Project Token not found
分析:未关联目标项目,仅靠令牌无法定位部署目标。

当前工作流配置

deploy-backend:
  needs: build-and-test
  runs-on: ubuntu-latest
  container: ghcr.io/railwayapp/cli:latest
  if: github.ref == 'refs/heads/main'
  env:
    SVC_ID: bioreactlab-backend
    RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
  steps:
    - uses: actions/checkout@v3
    - run: railway up --service=${{ env.SVC_ID }}
      working-directory: backend

补充说明

  • Railway文档推荐使用容器方案,但未达到预期效果
  • 项目已在Railway控制台完成正确配置
  • RAILWAY_TOKEN密钥已在GitHub仓库设置正确

解决方案与疑问解答

1. 非交互式环境下Railway CLI的认证与部署正确方式

CI环境中无需使用railway login命令,直接通过环境变量完成认证,同时必须显式关联项目:

  • 认证:通过RAILWAY_TOKEN环境变量传递令牌(令牌可在Railway控制台「Account Settings > Tokens」生成)
  • 关联项目:使用railway link --project <项目ID>命令绑定目标项目,而非直接传递位置参数

2. 环境变量传递至Railway CLI容器的正确方法

在GitHub Actions容器中,环境变量需通过env字段定义,确保变量名正确:

  • 核心变量需包含RAILWAY_TOKEN和RAILWAY_PROJECT_ID
  • 可添加调试步骤验证变量是否注入成功:
    - run: echo $RAILWAY_TOKEN && echo $RAILWAY_PROJECT_ID
    
  • 切换工作目录后环境变量会自动继承,无需额外配置

3. 部署的操作顺序

必须遵循环境变量注入 → 关联项目 → 执行部署的固定顺序:

  1. 确保RAILWAY_TOKEN和RAILWAY_PROJECT_ID已设置为环境变量
  2. 执行railway link --project <项目ID>关联目标项目
  3. 执行railway up --service <服务ID>完成部署

4. 最新Railway CLI在CI环境的已知问题

  • railway link命令参数格式易混淆,必须使用--project指定项目ID,不能用位置参数
  • 未显式关联项目时,即使设置RAILWAY_TOKEN也会触发Project Token not found错误
  • latest标签的CLI容器可能存在版本迭代兼容性问题,建议使用固定版本(如ghcr.io/railwayapp/cli:v3.10.0)

修正后的完整工作流配置

deploy-backend:
  needs: build-and-test
  runs-on: ubuntu-latest
  container: ghcr.io/railwayapp/cli:v3.10.0
  if: github.ref == 'refs/heads/main'
  env:
    SVC_ID: bioreactlab-backend
    RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
    RAILWAY_PROJECT_ID: ${{ secrets.RAILWAY_PROJECT_ID }}
  steps:
    - uses: actions/checkout@v3
    - run: railway link --project ${{ env.RAILWAY_PROJECT_ID }}
    - run: railway up --service=${{ env.SVC_ID }}
      working-directory: backend

内容的提问来源于stack exchange,提问作者Ha Xiao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:49:10