Sqlite无法使用Mojolicious和Par Packer找到DB文件

gpw*_*pwr 5 sqlite perl mojolicious

我正在用Perl编写一个使用Mojolicious和Sqlite的程序.我将使用Par Packer将其作为.exe文件分发,以便在其他Windows机器上进行部署.

我在Windows上使用Strawberry Perl进行开发.

我使用以下Windows批处理文件与Par Packer生成.exe文件:

pp -o hallo.exe ^
    -x ^
    -l libeay32__.dll ^
    -l zlib1__.dll ^
    -l ssleay32__.dll ^
    -a lib ^
    -a public ^
    -a templates ^
    -a "C:\strawberry\perl\site\lib\Mojo\entities.txt;Mojo\entities.txt" ^
    -a "C:\Strawberry\perl\vendor\lib\Mojolicious\resources\public;Mojolicious\public" ^
    -a "C:\Strawberry\perl\vendor\lib\Mojolicious\resources\templates;Mojolicious\templates" ^
    -a "D:\Perl\main.db" ^
    hallo.cgi
Run Code Online (Sandbox Code Playgroud)

以上工作完美但但是一旦我引入SQLite,我在尝试运行hello.exe时遇到以下错误:DBD :: SQLite :: db prepare failed:no such table:libraries

hallo.cgi正常运行时工作正常.以perl hallo.cgi为例.但是当所有内容都编译成.exe文件时,会发生Sqlite错误.

这里发生的是main.db(一个SQL lite数据库文件)与hallo.cgi(或hallo.exe)位于同一位置,但是当我运行hallo.exe时,SQLite找不到main.db,从而创建了一个main.db在它自己,但因为它自己创建它,数据库中没有数据,因为它找不到库表.

我该如何解决这个问题?

在我用于编译的上面的批处理文件中,我为Par Packer包含了main.db,但它似乎完全忽略了该行:

-a "D:\Perl\main.db" ^
Run Code Online (Sandbox Code Playgroud)

更新:我似乎通过查看$ ENV {PWD}来解决这个问题.($ ENV {PWD}表示工作目录)并使用chdir更改为它.进入后,SQlite能够获取文件并正常工作.请注意,在我的源代码中,我的操作包括Par packer所需的库和模块,这些库和模块创建了工作目录更改的情况.将其更改为原始工作目录解决了这个问题.

gpw*_*pwr 0

我通过查看 $ENV{PWD} 是什么解决了这个问题。($ENV{PWD} 表示工作目录)并使用 chdir 更改到它。一旦进入其中,SQlite 就能够获取该文件并正常工作。请注意,在我的源代码中,我的操作包括 Par packer 所需的库和模块,这造成了工作目录发生更改的情况。将其更改为原始工作目录解决了这个问题。