webman 使用phar打包后,如何读取.env文件?

xiaopi

根据webman文档中的打包,我已经把项目打包到build/program.phar
但是运行这个打包后,发现并不是读取.env配置的。 我试着把.env文件放到program.phar同级目录下,依旧不行。
下面是我的.env配置:

NAME=program
DEBUG=true
LISTEN=http://192.168.10.10:8787

这是config/app.php配置

return [
    'debug' => env('DEBUG',true),
    'default_timezone' => 'Asia/Shanghai',
];

这是config/server.php配置

return [
    'listen'               => env('LISTEN','http://0.0.0.0:8787'),
    'transport'            => env('TRANSPORT','tcp'),
    'context'              => [],
    'name'                 => env('NAME',''),
    'count'                => env('HTTP_PROCESS_COUNT',cpu_count() * 2),
    'user'                 => 'root',
    'group'                => 'root',
    'reusePort'            => false,
    'pid_file'             => runtime_path() . '/webman.pid',
    'status_file'          => runtime_path() . '/webman.status',
    'stdout_file'          => runtime_path() . '/logs/stdout.log',
    'log_file'             => runtime_path() . '/logs/workerman.log',
    'max_package_size'     => 10*1024*1024
];

这是config/plugin/webman/console/app.php

return [
    'enable'            => true,

    'phar_file_output_dir'    => BASE_PATH . DIRECTORY_SEPARATOR . 'build',

    'phar_filename'     => 'program.phar',

    'signature_algorithm'=> Phar::SHA256, //set the signature algorithm for a phar and apply it. The signature algorithm must be one of Phar::MD5, Phar::SHA1, Phar::SHA256, Phar::SHA512, or Phar::OPENSSL.

    'private_key_file'  => '', // The file path for certificate or OpenSSL private key file.

    'exclude_pattern'   => '#^(?!.*(config/plugin/webman/console/app.php|webman/console/src/Commands/(PharPackCommand.php|ReloadCommand.php)|LICENSE|composer.json|.github|.idea|doc|docs|.git|.setting|runtime|test|test_old|tests|Tests|vendor-bin|.md))(.*)$#',

    'exclude_files'     => [
        '.env', 'LICENSE', 'composer.json', 'composer.lock','start.php'
    ]
];

以上配置执行php start.php start 都是正常读取.env配置的

打包后,只能读取到env()函数的默认值

感谢帮忙看一下

2177 4 0
4个回答

keytehu

config/plugin/webman/console/app.php 的 exclude_files 里

'exclude_files'     => [
        '.env', 'LICENSE', 'composer.json', 'composer.lock','start.php'
    ]

'.env' 去掉试下呢?

  • xiaopi 2022-03-14

    谢谢哈,我来试一下。不过这不太符合我使用env的初衷,因为本地的.env是开发环境的配置。线上按理说应该有独立的生产环境的.env配置才合理

  • xiaopi 2022-03-14

    这种方式是可以读取.env的配置的。 感谢哈,我再想想怎么能把生产环境和开发环境区分开

Dalong

后来什么解决的?我也遇到

  • sparks 2022-11-09

    改打包的方法,新建一个env的挂载的,我记得我当时好像是这么弄的,

  • Dalong 2022-11-09

    有代码吗

  • sparks 2022-11-09

    晚上回家找找,现在有点忘记了,好像不太难的样子,

  • sparks 2022-11-09

    我记得我当时是看那个什么hybridphp还是哪个的源码,解决的,在console的命令的PharPackCommand.php文件里$phar->setStub("#!/usr/bin/env php这边,挂截一个.env的文件,加进去就可以了,

  • sparks 2022-11-09

    hyperf的php框架

  • xiaopi 2023-01-03

    后来把env打包到文件中了。这种方式可以,只不过线上文件要单独打包一次

admin

我寻思 打包后线上运行,env难道不是 export aa=aa?

euii

借楼问一个问题,如果按本来的日志目录是runtime下的话; 打包后日志生成的日志会放生成在哪里?

  • xiaopi 2023-01-04

    执行phar文件后,runtime/目录会在同一路径下生成

  • euii 2023-01-04

    了解,多谢。

年代过于久远,无法发表回答
🔝