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

时间:2015-06-23 22:10:13

标签: java spring mongodb heroku jhipster

JHipster提供用于将应用程序部署到云提供程序(例如Heroku和Openshift)的子生成器,但不适用于使用MongoDB的应用程序,因为Mongeez requires admin privileges当然在PaaS环境中是不可能的。< / p>

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

  • 首先,我手动导出由JHipster在我的本地开发机器上创建的MongoDB数据库,并将其导入Mongolab实例。
  • 如果使用的个人资料为this,则Mongeez无法实例化。
  • 经过对JHipster Heroku subgenerator的一些修改后,可以将应用程序部署到Heroku。生成器现在忽略prod(用于JDBC),在使用的Procfile中,我将配置文件更改为_HerokuDatabaseConfiguration.java(而不是prod)并删除了参数prod,heroku

它工作得很好,但是我在注入MongoDB连接字符串时遇到了问题。目前,凭据是&#34;硬编码&#34;进入--spring.datasource.heroku-url=$DATABASE_URL,因此在更改凭据时需要重新部署整个应用程序。在另一次尝试中,我将application-prod.yml添加到Procfile中,但没有任何效果(除非我遗漏了一些东西)。

那么我怎么能解决这个问题呢?正如我所说,应用程序在Heroku上运行没有任何问题,但是从例如派生连接细节是很好的。 MONGOLAB_URI环境变量。在其他新闻中,我有一种感觉,我不理解spring.data.mongodb.uri=$MONGOLAB_URI个人资料(我目前不使用)。

1 个答案:

答案 0 :(得分: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);
    }
}

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

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

compile group: 'com.github.mongobee', name: 'mongobee', version: mongobee_version

我还打开了pull request来更新JHipster生成器。现在我们等着看这些家伙是否同意:)