让 Laravel 在开发机器上加载一个备用公用文件夹

Posted

技术标签:

【中文标题】让 Laravel 在开发机器上加载一个备用公用文件夹【英文标题】:Have Laravel load an alternate public folder on development machine 【发布时间】:2015-08-26 02:34:43 【问题描述】:

我们有一个最小化 javascript/css 的构建脚本,然后将其复制到公用文件夹中。

我希望开发盒从应用文件夹加载文件,其中未最小化的脚本存储在开发盒中,但仍会在生产环境中运行最小化的脚本。

到目前为止我尝试了什么:

-更改公共路径:

if (App::environment() == 'development') 
    App::bind('path.public', function () 
        return app_path() . '/unminimized';
    );

这适用于我们使用 public_path() 的任何地方,但前端程序员使用相对路径,而不是 URL::asset()(或其他)来加载 javascript(我们使用框架,所以这并不容易改变)。他的 javascript 仍然从公共文件夹中加载

-改变nginx: 我尝试将 nginx 中的 root_path 从 /website/public 更改为 /website/code。这会正确加载 javascript,但是我的路由不会触发。

有没有人知道如何做到这一点?

【问题讨论】:

如果您修改 nginx 以指向开发框上的 /website/code,然后将 index.php 文件从 /website/public 复制到 /website/code,它应该会修复您的路线。您可以通过在公共场合创建指向 index.php 的符号链接来做到这一点,我对 nginx 不够熟悉,不知道它如何处理符号链接。 @NicholasHall,我试试看。 @NicholasHall 谢谢!它有效,但我还必须更改 index.php 中的这两行,以便它们匹配引导目录的新相对位置。你想把它作为答案提交,以便我可以给你信用吗?需要 DIR.'/../../../bootstrap/autoload.php'; $app = require_once DIR.'/../../../bootstrap/start.php'; 【参考方案1】:

如果您修改 nginx 以指向开发框上的 /website/code,然后将 index.php 文件从 /website/public 复制到 /website/code,它应该会修复您的路由。

您需要在 index.php 中修改以下几行:

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

$app = require_once __DIR__.'/../bootstrap/start.php';

匹配新位置,以便它们可以正确包含这些文件。

【讨论】:

【参考方案2】:

看起来很圆……

让我先看看我是否正确,你是用预编译器语言(scss/sass/less/coffeescript)编写你的东西吗?

如果是这样,那么你对未压缩的东西做了什么并不重要,因为:

    您应该在推送部署之前测试您的缩小代码 您不应同时部署缩小代码和开发版本

我看到你解决这个问题的最简单方法是使用类似gulp-inject 编写一个 gulp 任务,你可以传递一个标志 --dev 或 --prod 它将管理哪些版本的文件插入到刀片模板中(有它默认为 --dev)。

当然,编写一个类似的任务来撤消这些更改也是有利的。

如果您想更进一步,请拥有一个专用的 VCS,并在不同的“分支”中管理您的开发和生产版本。

【讨论】:

1) 我们有独立的测试流程,不要害怕!最小化的代码确实得到了测试。 2)我们有一个开发箱,我们的开发代码被“部署”到。我们的前端开发人员不希望每次更改单个字符时都必须运行 gulp 任务。 然后使用 watcher 或者 gulp-watch? 我们使用 grunt(不是我的选择,我们使用的框架可以)。

以上是关于让 Laravel 在开发机器上加载一个备用公用文件夹的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 部署共享主机子域

在 MAMP 上使用虚拟主机映射 Laravel 公用文件夹时遇到问题

Laravel5 如何从控制器访问公用文件夹

Laravel 在共享主机上给出 500 内部错误

xampp 子文件夹上的 Laravel 应用程序,无需导航到公用文件夹

重定向到 Lumen (Laravel) 上的公用文件夹