所有
尝试在Heroku上安装liquibase,以便我们可以将我们的数据库作为NodeJs部署的一部分进行更新,但遇到(我猜测)类路径错误。
应用结构
bower_components
liquibase
- 安装
- 更新
node_modules
SRC
的package.json
...
Heroku可以运行一个postinstall脚本,我们运行liquibase install
的package.json
"scripts": {
"postinstall": "./liquibase/install && ./liquibase/update && ./node_modules/bower/bin/bower install && ./node_modules/grunt-cli/bin/grunt bundle --force",
}
liquibase安装脚本。下载postgresql.jar和liquibase可执行文件并将它们放在liquibase文件夹中。
#!/usr/bin/env bash
wget https://github.com/liquibase/liquibase/releases/download/liquibase-parent-3.5.3/liquibase-3.5.3-bin.tar.gz
mkdir -p ~/liquibase
tar -zx -C ~/liquibase -f liquibase-3.5.3-bin.tar.gz
wget https://jdbc.postgresql.org/download/postgresql-42.1.1.jar
mkdir -p ~/lib
mv postgresql-42.1.1.jar ~/lib/postgresql.jar
安装完成后,我们尝试运行liquibase更新(./liquibase/update)
liquibase \
--logLevel="info" \
--driver="org.postgresql.Driver" \
--classpath="$~/lib/postgresql.jar" \
--changeLogFile="liquibase.xml" \
--url="jdbc:postgresql://$HOST:$PORT/$DATABASE" \
--username="$USERNAME" \
--password="$PASSWORD" \
update
但是我收到了错误
liquibase:找不到命令
这让我觉得liquibase不在路上
所以我这样做
导出路径= $ {PATH}:〜/ liquibase
这给了我这个错误
错误:无法找到或加载主类null
Yay for Java :(所以没有Java或类路径没有设置?
java -v
java版" 1.7.0_151"
OpenJDK运行时环境(IcedTea 2.6.11)(7u151-2.6.11-0ubuntu1.14.04.1)
OpenJDK 64位服务器VM(内置24.151-b01,混合模式)
echo $ JAVA_HOME
没什么
java
/ usr / bin / java
也许我应该设置$ JAVA_HOME = / usr / bin / java
再一次,没有。
此时,我对如何继续进展一无所知。任何帮助将不胜感激。
*已解决*
添加buildpack有帮助。还需要修改更新脚本</ p>
HOME=~
java -jar $HOME/liquibase/liquibase.jar \
--logLevel="info" \
--driver="org.postgresql.Driver" \
--classpath="$HOME/lib/postgresql.jar" \
--changeLogFile="liquibase.xml" \
--url="jdbc:postgresql://$HOST:$PORT/$DATABASE" \
--username="$USERNAME" \
--password="$PASSWORD" \
update
然后是安装后脚本
"scripts": {
"postinstall": "cd liquibase && ./install && ./update && cd .. && ./node_modules/bower/bin/bower install && ./node_modules/grunt-cli/bin/grunt bundle --force"
}
答案 0 :(得分:1)
首先,您需要将JVM buildpack添加到您的应用中:
$ heroku buildpacks:add -i 1 heroku/jvm
这将安装JDK 8(而不是默认的JDK 7),正确设置JAVA_HOME
,甚至设置JDBC_DATABASE_URL
(您可以直接在--url
选项中使用)。< / p>
消息“错误:无法找到或加载主类null”表示java
脚本(您正在运行的脚本)创建的liquibase
命令格式错误或不完整。我认为这可能是由于选项--classpath="$~/lib/postgresql.jar"
,这看起来很奇怪。或liquibase.jar相对于脚本的位置。
我认为您希望classpath
选项看起来像:
--classpath="/app/path/to/classes:/app/lib/postgresql.jar"
如果您仍有问题,我会尝试直接运行liquibase.jar
而不是使用脚本,例如:
java -jar liquibase.jar \
--logLevel="info" \
--driver="org.postgresql.Driver" \
--classpath="/app/path/to/classes:/app/lib/postgresql.jar" \
--changeLogFile="liquibase.xml" \
--url="$JDBC_DATABASE_URL" \
--username="$JDBC_DATABASE_USERNAME" \
--password="$JDBC_DATABASE_PASSWORD" \
update