Laravel 5.X一个实例多个应用程序


Laravel 5.X one instance multiple app

我希望设置laravel的一个实例并运行多个应用程序。每个应用都有自己的命名空间,包含自定义路由、配置、资产、视图和自己的comcomposer .json。所有应用程序将共享相同的供应商文件。这是我目前所做的。创建了多个命名空间,这就是每个应用程序目录结构的样子

 |--app
    |--App1
       |-- app
       |-- Bootstrap
       |-- config
       |-- database 
       |-- public
       |-- resources
       |-- storage
       |-- ..  
       |-- composer.json
    |-- App2
       |--..
 |--vendor

来解决供应商依赖,我在composer中更改了供应商文件夹位置。Json喜欢这样

"config": {
    "preferred-install": "dist",
    "vendor-dir":"../vendor"
}

我还更新了autoload.php中的供应商路径,以指向正确的位置。

我设置这个项目的环境也运行其他laravel项目。所有的成分都在那里(htaccess, vhosts, ....)。

当我运行composer dump- autolload时,一切都加载了,我没有得到任何错误。当我导航到我的路线时,我得到一个空白页。应用程序调试设置为true。

我以这种方式建立laravel的方法正确吗?如果有,我哪里做错了,或者我做错了什么。
提前谢谢你。

在我从下面的评论中得到一点提示之后,我能够使设置工作。1 -确保存储权限设置为775可写。2 -确保你已经创建了。env文件。在我的例子中,我必须创建它,没有转移。

my vhosts

<VirtualHost *:80>
    ServerName app1.server.local
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/tenants/app1/public
    <Directory /var/www/tenants/app1/public/>
       Options Indexes FollowSymLinks MultiViews
       AllowOverride All
       Order allow,deny
       allow from all
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:80>
    ServerName app2.server.local
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/tenants/app2/public
    <Directory /var/www/tenants/app2/public/>
       Options Indexes FollowSymLinks MultiViews
       AllowOverride All
       Order allow,deny
       allow from all
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

希望这有助于任何人希望建立一个laravel实例和运行多个应用程序。

Tim的评论指出了我所忽略的东西。我将存储文件夹权限更改为775。我添加了。env文件。和Booya,我有多个应用程序与一个laravel实例。

Laravel 5、6和7 +

添加新的供应商文件夹config:

...
"config": {
    ...,
    "vendor-dir": "../vendor"
},
...

然后运行composer update

那么你需要修改两个文件:

  1. 您的应用程序:public/index.php

    require __DIR__.'/../../vendor/autoload.php';

  2. 你的工匠命令在根文件夹:artisan

    require __DIR__.'/../vendor/autoload.php';

  3. Illuminate'Foundation'PackageManifest中的包自动发现:

    $this->vendorPath = $basePath.'/../vendor'; //Change this line in constructor

并重新运行

php artisan package:discover --ansi