无法向离线模式sqlx的cargo prepare传递DATABASE_URL和BIN名称参数
问题原因
你遇到的两个报错分别对应两个配置错误:
- 数据库URL没有用引号包裹:URL中的
&符号在shell环境中会被识别为后台执行命令的标识符,不加引号的情况下你输入的命令会被拆分为多个后台子任务,导致--database-url实际只传入了&之前的半截内容,后续的user、password参数都被当作独立命令执行,sqlx-cli自然识别不到完整的数据库链接参数。 - 参数分隔符
--的位置错误:cargo sqlx prepare的参数分为两部分,sqlx-cli自身的参数(如--database-url)需要放在--之前,传递给cargo check的参数(如--bin my-project)需要放在--之后,你之前的传参顺序完全反了。
解决方法
方法1:命令行直接传参
调整参数顺序,同时用单引号包裹数据库URL避免shell解析特殊字符,正确命令如下:
cargo sqlx prepare --database-url 'postgres://postgres@localhost?db_name=postgres&user=postgres&password=postgres' -- --bin my-project
方法2:利用.env文件简化操作
你已经在使用.env配置环境变量,可以直接在.env中新增DATABASE_URL配置项,值为你的完整数据库链接地址,之后无需在命令行传--database-url参数,直接执行以下命令即可:
cargo sqlx prepare -- --bin my-project
sqlx-cli会自动读取.env中的DATABASE_URL变量,不需要额外配置。
执行成功后会在项目根目录生成sqlx-data.json文件,后续编译时sqlx会自动读取该文件实现离线构建。
内容的提问来源于stack exchange,提问作者AMP_035
相关产品推荐
相关产品推荐

