Sqlite 无法使用 Mojolicious 和 Par Packer 找到数据库文件
Sqlite unable to find DB file with Mojolicious and Par Packer
我正在用 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
上面的这个工作完美但是一旦我引入 SQLite 我在尝试 运行 hello.exe 时收到以下错误:
DBD::SQLite::db prepare failed: no such table: libraries
hallo.cgi 在 运行 正常时工作正常。 perl hallo.cgi 例如。但是当所有的东西都被编译成一个.exe文件时,就会出现Sqlite错误。
这里发生的是 main.db(一个 SQL 精简版数据库文件)与 hallo.cgi(或 hallo.exe)位于同一位置,但是当我 运行 hallo.exe SQLite 找不到 main.db 并因此自己创建了一个 main.db 但是因为它是自己创建的所以数据库中没有数据找不到库 table。
我将如何着手解决这个问题?
在上面用于编译的批处理文件中,我为 Par Packer 添加了 main.db,但它似乎完全忽略了以下行:
-a "D:\Perl\main.db" ^
我通过查看 $ENV{PWD} 是什么解决了这个问题。 ($ENV{PWD} 表示工作目录) 并使用 chdir 更改到它。一旦进入其中,SQlite 就能够获取文件并正常工作。请注意,在我的源代码中,我有一些操作包含 Par packer 需要的库和模块,这造成了工作目录发生变化的情况。将其更改为原始工作目录解决了这个问题。
我正在用 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
上面的这个工作完美但是一旦我引入 SQLite 我在尝试 运行 hello.exe 时收到以下错误:
DBD::SQLite::db prepare failed: no such table: libraries
hallo.cgi 在 运行 正常时工作正常。 perl hallo.cgi 例如。但是当所有的东西都被编译成一个.exe文件时,就会出现Sqlite错误。
这里发生的是 main.db(一个 SQL 精简版数据库文件)与 hallo.cgi(或 hallo.exe)位于同一位置,但是当我 运行 hallo.exe SQLite 找不到 main.db 并因此自己创建了一个 main.db 但是因为它是自己创建的所以数据库中没有数据找不到库 table。
我将如何着手解决这个问题?
在上面用于编译的批处理文件中,我为 Par Packer 添加了 main.db,但它似乎完全忽略了以下行:
-a "D:\Perl\main.db" ^
我通过查看 $ENV{PWD} 是什么解决了这个问题。 ($ENV{PWD} 表示工作目录) 并使用 chdir 更改到它。一旦进入其中,SQlite 就能够获取文件并正常工作。请注意,在我的源代码中,我有一些操作包含 Par packer 需要的库和模块,这造成了工作目录发生变化的情况。将其更改为原始工作目录解决了这个问题。