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所需的库和模块,这些库和模块创建了工作目录更改的情况.将其更改为原始工作目录解决了这个问题.
我通过查看 $ENV{PWD} 是什么解决了这个问题。($ENV{PWD} 表示工作目录)并使用 chdir 更改到它。一旦进入其中,SQlite 就能够获取该文件并正常工作。请注意,在我的源代码中,我的操作包括 Par packer 所需的库和模块,这造成了工作目录发生更改的情况。将其更改为原始工作目录解决了这个问题。
| 归档时间: |
|
| 查看次数: |
165 次 |
| 最近记录: |