将JHipster / MongoDB应用程序部署到Heroku

ala*_*eno 5 java spring heroku mongodb jhipster

JHipster提供了用于将应用程序部署到云提供程序(例如Heroku和Openshift)的子生成器,但由于Mongeez需要管理员特权(这在PaaS环境中是不可能的),因此不适用于使用MongoDB的应用程序。

但是,只要停用Mongeez,就应该可以在云提供商上运行JHipster + MongoDB。我做了以下(使用Heroku):

  • 首先,我在本地开发计算机上手动导出了由JHipster创建的MongoDB数据库,并将其导入了Mongolab实例。
  • 如果使用的配置文件是prod,则不会实例化Mongeez。
  • 在对JHipster的Heroku子生成器进行一些修改之后,可以将应用程序部署到Heroku。现在,生成器将忽略_HerokuDatabaseConfiguration.java(这是针对JDBC的),并且在使用的Procfile中,我将配置文件更改为prod(而不是prod,heroku)并删除了参数--spring.datasource.heroku-url=$DATABASE_URL

它工作得很好,但是我在注入MongoDB连接字符串时遇到了问题。目前,凭据已“硬编码”为application-prod.yml,因此在凭据更改的情况下有必要重新部署整个应用程序。在另一种尝试中,我添加spring.data.mongodb.uri=$MONGOLAB_URI了Procfile,但是没有任何效果(除非我错过了什么)。

那么我该如何解决这个问题呢?就像我说的那样,该应用程序在Heroku上运行没有任何问题,但是最好从MONGOLAB_URI环境变量中获取连接详细信息。在其他新闻中,我感到我不了解cloud个人资料(目前不使用该个人资料)。

Mat*_*yas 0

您可以使用 mongobee 代替Mongeez为您的应用程序提供迁移逻辑。

我已经尝试过了,它适用于 heroku

这是我的 jhipster 默认 mongobee 迁移代码,与 mongeez 具有相同的效果。

package your.package.name.config.dbmigrations;

import com.github.mongobee.changeset.ChangeLog;
import com.github.mongobee.changeset.ChangeSet;
import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DB;
import com.mongodb.DBCollection;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * Creates the initial database setup
 */
@ChangeLog(order = "001")
public class InitialSetupMigration {


    private Map<String, String>[] authoritiesUser = new Map[]{new HashMap<>()};

    private Map<String, String>[] authoritiesAdminAndUser = new Map[]{new HashMap<>(), new HashMap<>()};

    {
        authoritiesUser[0].put("_id", "ROLE_USER");

        authoritiesAdminAndUser[0].put("_id", "ROLE_USER");
        authoritiesAdminAndUser[1].put("_id", "ROLE_ADMIN");
    }

    @ChangeSet(order = "01", author = "initiator", id = "01-addAuthorities")
    public void addAuthorities(DB db) {
        DBCollection authorityCollection = db.getCollection("jhi_authority");
        authorityCollection.insert(
            BasicDBObjectBuilder.start()
                .add("_id", "ROLE_ADMIN")
                .get());
        authorityCollection.insert(
            BasicDBObjectBuilder.start()
                .add("_id", "ROLE_USER")
                .get());
    }


    @ChangeSet(order = "02", author = "initiator", id = "02-addUsers")
    public void addUsers(DB db) {
        DBCollection usersCollection = db.getCollection("jhi_user");
        usersCollection.createIndex("login");
        usersCollection.createIndex("email");
        usersCollection.insert(BasicDBObjectBuilder.start()
            .add("_id", "user-0")
            .add("login", "system")
            .add("password", "$2a$10$mE.qmcV0mFU5NcKh73TZx.z4ueI/.bDWbj0T1BYyqP481kGGarKLG")
            .add("first_name", "")
            .add("last_name", "System")
            .add("email", "system@localhost")
            .add("activated", "true")
            .add("lang_key", "en")
            .add("created_by", "system")
            .add("created_date", new Date())
            .add("authorities", authoritiesAdminAndUser)
            .get()
        );
        usersCollection.insert(BasicDBObjectBuilder.start()
            .add("_id", "user-1")
            .add("login", "anonymousUser")
            .add("password", "$2a$10$j8S5d7Sr7.8VTOYNviDPOeWX8KcYILUVJBsYV83Y5NtECayypx9lO")
            .add("first_name", "Anonymous")
            .add("last_name", "User")
            .add("email", "anonymous@localhost")
            .add("activated", "true")
            .add("lang_key", "en")
            .add("created_by", "system")
            .add("created_date", new Date())
            .add("authorities", new Map[]{})
            .get()
        );
        usersCollection.insert(BasicDBObjectBuilder.start()
            .add("_id", "user-2")
            .add("login", "admin")
            .add("password", "$2a$10$gSAhZrxMllrbgj/kkK9UceBPpChGWJA7SYIb1Mqo.n5aNLq1/oRrC")
            .add("first_name", "admin")
            .add("last_name", "Administrator")
            .add("email", "admin@localhost")
            .add("activated", "true")
            .add("lang_key", "en")
            .add("created_by", "system")
            .add("created_date", new Date())
            .add("authorities", authoritiesAdminAndUser)
            .get()
        );
        usersCollection.insert(BasicDBObjectBuilder.start()
            .add("_id", "user-3")
            .add("login", "user")
            .add("password", "$2a$10$VEjxo0jq2YG9Rbk2HmX9S.k1uZBGYUHdUcid3g/vfiEl7lwWgOH/K")
            .add("first_name", "")
            .add("last_name", "User")
            .add("email", "user@localhost")
            .add("activated", "true")
            .add("lang_key", "en")
            .add("created_by", "system")
            .add("created_date", new Date())
            .add("authorities", authoritiesUser)
            .get()
        );
    }

    @ChangeSet(author = "initiator", id = "03-addSocialUserConnection", order = "03")
    public void addSocialUserConnection(DB db) {
        DBCollection socialUserConnectionCollection = db.getCollection("jhi_social_user_connection");
        socialUserConnectionCollection.createIndex(BasicDBObjectBuilder
                .start("user_id", 1)
                .add("provider_id", 1)
                .add("provider_user_id", 1)
                .get(),
            "user-prov-provusr-idx", true);
    }
}
Run Code Online (Sandbox Code Playgroud)

DatabaseConfiguration.java文件中删除 mongeez 并添加

@Bean
public Mongobee mongobee() {

    log.debug("Configuring Mongobee");

    Mongobee mongobee = new Mongobee(mongo);
    mongobee.setDbName(mongoProperties.getDatabase());
    mongobee.setChangeLogsScanPackage(
        "de.shaere.sharecore.config.dbmigrations"); // package to scan for changesets
    mongobee.setEnabled(true);
    return mongobee;
}
Run Code Online (Sandbox Code Playgroud)

最后更新你的 gradle 文件,删除 mongeez 依赖项并添加:

compile group: 'com.github.mongobee', name: 'mongobee', version: mongobee_version
Run Code Online (Sandbox Code Playgroud)

我还打开了一个拉取请求来更新 JHipster 生成器。现在我们等着看大家是否同意:)