提问者:小点点

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


所有,

尝试在Heroku上安装liquibase,以便我们可以更新我们的数据库作为NodeJs部署的一部分,但遇到(我猜)类路径错误。

app结构
bower_components
liquibase
-install
-update
node_modules
src
pack. json

Heroku可以在我们运行liquibase安装的地方运行postinstall脚本

包. 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

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(build 24.151-b01,混合模式)

Echo$JAVA_HOME
没有

其中java
/usr/bin/java

也许我应该设置$JAVA_HOME=/usr/bin/java

再次,什么都没有。

在这一点上,我不知道如何继续。任何帮助都将不胜感激。

*已解决*

添加buildpack有帮助。还需要修改更新脚本

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

匿名用户

首先,您需要将JVMbuildpack添加到您的应用程序:

$ heroku buildpacks:add -i 1 heroku/jvm

这将安装JDK8(而不是默认的JDK7),正确设置JAVA_HOME,甚至设置JDBC_DATABASE_URL(您可以直接在--url选项中使用)。

错误:无法找到或加载main class null消息提示由liquibase脚本(您正在运行的脚本)创建的java命令要么格式错误,要么不完整。我认为这可能是由于选项--classpath="$~/lib/postgresql. jar",这看起来很奇怪。或者liquibase.jar相对于脚本的位置。

我想你希望你的类路径选项看起来像:

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