为什么SonarQube中的新用户使用active = NULL创建?

时间:2015-03-04 18:33:41

标签: sonarqube sonarqube-4.5

我刚刚安装了SonarQube 4.5,连接到Postgres数据库。

在代码分析方面似乎一切正常,但是当我通过设置屏幕或注册表单创建新用户时,创建的用户设置为'active'在数据库中为null。如果我手动将'有效'更新为 true ,我可以使用新用户,一切似乎都很好。

'用户'上的'有效'列的默认设置为true。

还有其他SonarQube实例使用相同的数据库,每个实例都有自己的架构。因此,我在安装时遇到了一些初步困难,并且不得不手动执行数据库迁移的某些部分,所以我假设我错过了一些东西,但我对Rails一无所知,所以我很难调试。

我不确定这些是否相关,但这是我运行SonarQube的过程:

在早期的引导过程中,Rails显然能够从其他模式中找到'schema_migrations'表,但是当它尝试从'schema_migrations'中选择时(在正确的架构中)找不到它,因此抛出异常并中止数据库设置。因此,我在我的架构中创建了一个'schema_migrations'表,其中包含一个列'版本',重新启动了Sonar,它现在处于一种状态,它认为它正在进行版本升级并启动数据库迁移。

'011_create_administrator.rb'中的迁移失败,因为它试图在'用户'的'有效'列中插入NULL ,该列尚未创建。因此,我在没有'有效'部分的情况下手动运行插入,将'schema_migrations.version'更新为11,然后重新启动。

迁移再次开始,现在在'530_merge_measure_data_into_project_measures.rb'

中失败了
"Fail to execute database migration: org.sonar.server.db.migrations.v44.MeasureDataMigration
org.postgresql.util.PSQLException: ERROR: column m.measure_data does not exist."

因此,我将'measure_data'列添加到'project_measures',然后重新启动。现在迁移成功完成,SonarQube正常启动,我能够以管理员身份登录并开始分析代码。

2 个答案:

答案 0 :(得分:0)

请不要修改数据库,在新数据库上安装新的SonarQube实例时,应该可以开箱即用。

所以我建议你从头开始重启:

  • 在Postgres中删除您的架构并创建一个新的架构,其权限授予"声纳"用户
  • 在此新架构上启动SQ
  • 一切都应该正常工作

答案 1 :(得分:0)

正确答案可能是为SonarQube创建一个专用数据库,但与此同时我通过使用此触发器解决了这个问题:

CREATE FUNCTION activate_user() RETURNS trigger as $activate_user$
    BEGIN
        IF (NEW.active IS NULL) THEN
            NEW.active := true; 
        END IF;

        RETURN NEW;
    END;    
$activate_user$ LANGUAGE plpgsql;

CREATE TRIGGER activate_user_trigger BEFORE INSERT on fst_sonar.users
    FOR EACH ROW EXECUTE PROCEDURE activate_user();

    commit;