【问题标题】:Sqlite unable to find DB file with Mojolicious and Par PackerSqlite 无法使用 Mojolicious 和 Par Packer 找到 DB 文件
【发布时间】:2016-09-22 11:07:13
【问题描述】:

我正在用 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 lite 数据库文件)与 hallo.cgi(或 hallo.exe)位于同一位置,但是当我运行 hallo.exe SQLite 找不到 main.db 并因此创建一个main.db 是它自己的,但是因为它是自己创建的,所以数据库中没有数据,因为它找不到库表。

我将如何解决这个问题?

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

-a "D:\Perl\main.db" ^

【问题讨论】:

  • 也许您应该将您的更新发布为答案并将其标记为已接受答案以解决此问题的状态。

标签: perl sqlite mojolicious


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 2013-09-19
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多