把Laravel5產品放到阿里輕雲

阿里的輕雲服務器滿足Laravel5的基本要求(PHP >= 5.4,Mcrypt PHP Extension,OpenSSL PHP Extension,Mbstring PHP Extension,Tokenizer PHP Extension),於是嘗試着部署了下。首先我是切換到Linux系統的,不知道Win下是什麼狀況。然後在高級環境設置中把php版本設置爲5.5,php.ini全部打開(未測試關閉情況)。然後用FTP上傳文件到服務器。

把除public文件夾外的所有文件上傳到/cgi-bin中,修改storage文件夾及其子文件夾爲可寫權限。把public中所有文件上傳到/htdocs中。修改/htdocs/index.php中如下兩行:

// require __DIR__.'/../bootstrap/autoload.php';
require __DIR__.'/../cgi-bin/bootstrap/autoload.php';

// $app = require_once __DIR__.'/../bootstrap/app.php';
$app = require_once __DIR__.'/../cgi-bin/bootstrap/app.php';

正常情況下,此時應該能正常訪問無數據庫操作的頁面。這裏也是我比較困惑的地方,配置文件.env無法被讀取,感覺是上傳後就遭到服務器刪除了。之前測試.htaccess也怪怪的,還懷疑是不是沒開mod_rewrite。但是我在子文件夾裝wordpress測試就正常,所以.htaccess和mod_rewrite都是正常的。但是.env始終讀取不到,我還試圖修改vendor\vlucas\phpdotenv\src\Dotenv.php也不行,最後直接把數據庫信息寫config/database.php裏了。這樣數據庫就能正常使用了。.env中的其他設置也都可以在config中各個文件單獨設置,當然了如果.env可用還是用.env的好。

  1. 我今天也碰到这个问题了,多番搜索之后,只有博主这篇文章提到,Thank you!
    沿着你的思路,阅读了一小部分源码,做了一些测试,得到以下结果,在此记录一下。
    版本:
    laravel 5.2

    原因:
    配置文件 .env 并非无法读取,应该是虚拟主机做了限制,无法成功调用 putenv(),导致后续调用 env() 返回null,该函数位于\Illuminate\Foundation\helpers.php。

    解决方案(两种):
    1.在本地运行 php artisan config:cache 生成config缓存,laravel运行时会直接调用缓存,跳过上述调用 env() 的步骤;把缓存文件 /bootstrap/cache/config.php 复制到虚拟主机上。
    2.Dotenv.php加载.env配置时,除了把数据设置到putenv(),同时会设置到 $_ENV、$_SERVER,我们可以自定义 env() 函数,功能和\Illuminate\Foundation\helpers.php的env()类似,只是改为从 $_ENV 上获取数据,自定义的env()函数需比\Illuminate\Foundation\helpers.php的env()提前加载。

    我采用的是方案1,方案2理论上是可行的,但我目前没进行实践和测试。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *