网络上至少有十几个关于如何使用 Docker 设置 Laravel 应用程序的教程。他们都使用的基本设置是 3 个 Docker 容器:
Nginx 和 PHP-fpm 容器依赖于共享卷。HTTP 请求进入 Nginx 以获取共享卷上的文件。Nginx 将请求交给 PHP-fpm。Php-fpm 还可以访问共享卷中的文件,因此它可以运行脚本。
对于开发来说,这太棒了。我可以编辑共享卷中的文件并立即测试更改。但我在质疑我是否希望将其用于生产。我真的希望我的任何代码都在运行 Docker 的服务器上吗?这似乎首先违背了 Dockerising 的一些目的。似乎我希望代码在运行 nginx 和 PHP-fpm 的 Docker 容器中自包含(数据库可以是托管环境中的单独容器或服务)。
我的想法在这里正确吗?在 Docker 中部署 Laravel 进行生产的最佳实践是什么?
我正在使用 Webdriver.io 在大量页面上运行测试。因为页面的所有规范都在 JSON 文件中,所以我有一个特殊的类来设置测试。它看起来像这样:
module.exports = class PageTester {
suiteName = '';
browser = {};
constructor (suiteName, browser) {
this.suiteName = suiteName;
this.browser = browser;
}
testModel(currentModel) {
describe(this.suiteName + ' endpoint ' + currentModel.url, () => {
this.browser.url(currentModel.url);
/* it() statements for the test */
});
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在我的规范文件夹中,我有一个加载 JSON 并将其插入 PageTester 类的文件,如下所示:
const PageTester = require('../modules/PageTester');
const models = require('/path/to/some/file.json');
const pageTester = new PageTester('Some Name', browser);
for (const modelName in models) {
pageTester.testModel(models[modelName]);
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,WebdriverIO 会给出以下警告: …
我可能遗漏了一些非常基本的东西.我有一个Web脚本,告诉shell脚本更新一些数据库记录.这些记录用于统计信息,这样Web脚本就不必在更新数据库记录时等待.但是,我实际上无法让shell脚本从命令行运行它.这是我正在尝试的代码:
perl async_sql.pl 'UPDATE some_table set i = i + 1 WHERE (n in (\'328430\',\'334969\',\'330179\',\'335290\',\'335285\',\'335284\',\'335264\',\'335145\',\'335146\',\'335147\',\'335148\',\'335149\',\'335230\',\'335201\',\'335198\',\'335196\',\'335167\',\'335151\',\'335152\',\'335143\',\'334969\',\'334972\',\'334977\',\'334978\',\'334979\',\'334980\',\'334982\',\'334983\',\'334984\',\'334934\',\'334947\',\'334948\',\'334950\',\'334992\',\'335014\',\'335026\',\'335030\',\'335032\',\'334864\',\'334862\',\'334861\',\'334858\',\'334855\',\'334852\',\'334850\',\'334849\',\'334848\',\'334847\',\'334844\',\'334842\'))'
Run Code Online (Sandbox Code Playgroud)
巴什告诉我:
-bash:意外令牌附近的语法错误`)'
我错过了什么?
I'm trying to rewrite the URL
http://domain.com/whatever
Run Code Online (Sandbox Code Playgroud)
To:
http://domain.com/cgi-bin/script.cgi
Run Code Online (Sandbox Code Playgroud)
My .htaccess file looks like this:
RewriteEngine On
RewriteRule /whatever /cgi-bin/script.cgi [NC]
Run Code Online (Sandbox Code Playgroud)
This doesn't work and gives me a 404 error. However, this works:
RewriteEngine On
RewriteRule /whatever http://domain.com/cgi-bin/script.cgi [NC]
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,URL 更改对用户来说是可见的。我究竟做错了什么?
不是100%肯定这是一个Perl问题,但似乎是.我有一个与PayPal连接的IPN脚本来验证交易.它工作正常,直到昨天,我安装了LWP :: Protocol :: https.从那时起,它一直没有出现错误:
Can't connect to www.paypal.com:443 (certificate verify failed)
LWP::Protocol::https::Socket: SSL connect attempt failed error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed at /usr/local/share/perl5/LWP/Protocol/http.pm line 47.
Run Code Online (Sandbox Code Playgroud)
运行GET https://www.paypal.com从bash中(使用LWP)产生相同的错误消息.OTOH,跑步GET https://www.gmail.com成功.运行openssl s_client -host paypal.com -port 443返回(以及其他内容)Verify return code: 0 (ok).curl "https://www.paypal.com/cgi-bin/webscr?cmd=_notify-validate"成功收到PayPal的回复.所以它似乎确实是Perl特有的.
模块版本:
LWP 6.13
LWP::Protocol::https 6.06
IO::Socket::SSL 2.015
Mozilla::CA 20141217 (note: I've tried the script both using Mozilla::CA and without it... results have been the same)
Run Code Online (Sandbox Code Playgroud)
如果有其他相关模块,请告诉我.Perl版本是5.10.1.服务器操作系统是RHEL 6.
看起来这应该是直截了当但以下代码不起作用:
$text = preg_replace('/test([0-9]+)/i', $array["$1"], $text);
Run Code Online (Sandbox Code Playgroud)
该代码是应该找到,如"test1的","TEST2","TEST3"等在文本的所有实例,并用$阵列[1]的值替换,$阵列[2],$阵列[3],等等
我究竟做错了什么?