让 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 在开发机器上加载一个备用公用文件夹的主要内容,如果未能解决你的问题,请参考以下文章
在 MAMP 上使用虚拟主机映射 Laravel 公用文件夹时遇到问题