Padre 抱怨 SQLite 数据库问题

ago*_*old 4 sqlite perl padre ubuntu-14.04

我从 perl 开始,想在 Ubuntu 14.04 上安装 IDE Padre这个问题的答案表明我可以简单地使用apt-get

sudo apt-get install padre
Run Code Online (Sandbox Code Playgroud)

我也尝试安装它:

sudo cpan Padre
Run Code Online (Sandbox Code Playgroud)

指示在这里

但是,当我运行时padre,它给了我以下错误:

DBD::SQLite::db selectall_arrayref failed: attempt to write a readonly database at (eval 1905) line 41.
Perl exited with active threads:
    1 running and unjoined
    0 finished and unjoined
    0 running and detached
Run Code Online (Sandbox Code Playgroud)

当我以 root ( sudo padre)运行它时:

DBD::SQLite::db do failed: Safety level may not be changed inside a transaction at (eval 1905) line 37.
Perl exited with active threads:
    1 running and unjoined
    0 finished and unjoined
    0 running and detached
Run Code Online (Sandbox Code Playgroud)

padre --version显示给我:Perl Application Development and Refactoring Environment 1.00,我的 perl 版本是 5.18.2。

/usr/bin/padre脚本中,我没有看到对 SQLite 数据库的任何引用。有谁知道我该如何解决这个问题?

ago*_*old 5

最后我在这个错误报告中找到了解决方案。在文件Locker.pm(在我的系统中/usr/share/perl5/Padre)中,应该更改以下函数(第 102 行):

sub db_increment {
    my $self = shift;
    unless ( $self->{db_depth}++ ) {
        Padre::DB->begin;    
        # ...
        Padre::DB->pragma( synchronous => 0 );
    }
    return;
}
Run Code Online (Sandbox Code Playgroud)

到:

sub db_increment {
    my $self = shift;
    unless ( $self->{db_depth}++ ) {
        #...
        Padre::DB->pragma( synchronous => 0 );
        Padre::DB->begin;
    }
    return;
}
Run Code Online (Sandbox Code Playgroud)

即改变的秩序Padre::DB->pragmaPadre::DB->begin

这允许我以padreroot ( sudo)身份启动,为了解决这个问题,我不得不更改 Padre 配置的所有者。我使用以下方法更改了用户的权限chown

sudo chown -R myuser:myuser /.local/share/.padre/
Run Code Online (Sandbox Code Playgroud)