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 数据库的任何引用。有谁知道我该如何解决这个问题?
最后我在这个错误报告中找到了解决方案。在文件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->pragma和Padre::DB->begin。
这允许我以padreroot ( sudo)身份启动,为了解决这个问题,我不得不更改 Padre 配置的所有者。我使用以下方法更改了用户的权限chown:
sudo chown -R myuser:myuser /.local/share/.padre/
Run Code Online (Sandbox Code Playgroud)