如何使用NodeJ在Heroku上设置liquibase?

时间:2017-09-12 21:12:21

标签: java heroku liquibase

所有

尝试在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"
  }

1 个答案:

答案 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