0

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

就代码分析而言,一切似乎都运行良好,但是当我通过设置屏幕或注册表单创建新用户时,会在数据库中将“活动”设置为 null 来创建用户。如果我手动将“活动”更新为true,我可以使用新用户,一切看起来都很好。

“用户”上的“活动”列默认设置为真。

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

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

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

'011_create_administrator.rb'中的迁移失败,因为它试图将 NULL 插入'users'的'active'列,而该列尚未创建。因此,我手动运行了没有“活动”部分的插入,将“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 正常启动,我能够以管理员身份登录并开始分析代码。

4

2 回答 2

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;
于 2015-03-06T15:04:01.650 回答
0

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

所以我建议你从头开始:

  • 在 Postgres 中删除您的架构并创建一个授予“声纳”用户访问权限的新架构
  • 在这个新模式上启动 SQ
  • 一切都应该正常工作
于 2015-03-05T11:30:54.437 回答