Gradle Exec 任务不在远程主机上以 psql 开头
Posted
技术标签:
【中文标题】Gradle Exec 任务不在远程主机上以 psql 开头【英文标题】:Gradle Exec Task not starting with psql on remote host 【发布时间】:2018-03-31 05:37:27 【问题描述】:我需要在 Gradle(版本 4.2.1)中的远程数据库上执行 SQL 脚本。所以我用 Exec 任务尝试了它。当数据库在我的本地计算机上时,该任务有效。对于远程主机,任务未启动。
这些是任务(第一个工作完美)。
task psqlLocalExec(type: Exec)
commandLine 'cmd', '/c', 'psql -f myscript.sql'
task psqlRemoteExec(type: Exec)
commandLine 'cmd', '/c', 'psql -h my.remote.host -f myscript.sql' // not working
命令行输出(几分钟后我取消了):
C:\myproject>gradlew :proj:psqlRemoteExec --stacktrace
<-------------> 0% EXECUTING [3m 43s]
> :proj:psqlRemoteExec
在 cmd(没有 Gradle)上该命令有效。
【问题讨论】:
试试commandLine 'cmd', '/c', 'psql', '-h', 'my.remote.host', '-f', 'myscript.sql'
或commandLine 'cmd /c psql -h my.remote.host -f myscript.sql'.split(' ')
我已经试过了,不幸的是同样的负面结果。
你可以在没有 gradle 的情况下从命令行运行命令吗?
Gradle 会将整个命令(包括cmd /c
)发送给操作系统执行。确保将其包含在命令行测试中
我猜您需要将一个选项传递给psql
以在执行脚本后退出。我看到here 你输入\q and ENTER
以从命令行退出。我猜有一个命令行选项可以自动退出,或者你可以在 SQL 脚本的末尾添加一些东西
【参考方案1】:
我的Password File Configuration 在脚本中有错误。要修复可以设置环境变量的问题:
task psqlRemoteExec(type: Exec)
environment 'PGPASSFILE', 'path/to/pgpass.conf'
commandLine 'cmd', '/c', 'psql -h my.remote.host -f myscript.sql'
【讨论】:
以上是关于Gradle Exec 任务不在远程主机上以 psql 开头的主要内容,如果未能解决你的问题,请参考以下文章
如何让我的 gradle 测试任务为不在 maven Central 上的库使用 python pip install?