我最近开始迁移到Docker 1.9和Docker-Compose 1.5的网络功能,以替换使用链接.
到目前为止链接没有问题nginx通过docker-compose连接到位于一组不同服务器中的php5-fpm fastcgi服务器.最近,当我运行docker-compose --x-networking up
我的php-fpm时,mongo和nginx容器启动,但nginx立即退出[emerg] 1#1: host not found in upstream "waapi_php_1" in /etc/nginx/conf.d/default.conf:16
但是,如果我在php和mongo容器运行时再次运行docker-compose命令(nginx退出),nginx启动并从那时起正常工作.
这是我的docker-compose.yml
档案:
nginx:
image: nginx
ports:
- "42080:80"
volumes:
- ./config/docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
php:
build: config/docker/php
ports:
- "42022:22"
volumes:
- .:/var/www/html
env_file: config/docker/php/.env.development
mongo:
image: mongo
ports:
- "42017:27017"
volumes:
- /var/mongodata/wa-api:/data/db
command: --smallfiles
Run Code Online (Sandbox Code Playgroud)
这是我default.conf
的nginx:
server {
listen 80;
root /var/www/test;
error_log /dev/stdout debug;
access_log /dev/stdout;
location / {
# try to serve file directly, fallback to app.php …
Run Code Online (Sandbox Code Playgroud) 有一个ubuntu 10.04服务器,如果我从这个服务器所在办公室以外的任何服务器ssh一个文件(意味着任何使用scp-ing到这个服务器通过局域网从这个服务器总是工作由于某种原因)然后,对于任何大小超过2112 kB的文件,scp-ing都会失败,并且卡在2112 kB.所以
scp -vvv /home/attila-szeremi/aszeremi.tar.gz attila@server.hu:~/aszeremi.tar.gz
Run Code Online (Sandbox Code Playgroud)
1% 2112KB 909.2KB/s - stalled -
在最后动态显示类似的东西,其中KB/s变得越来越低.
有谁知道可能导致这种情况的原因以及如何解决这个问题?
到目前为止我尝试了什么:
当我添加一个新的包到现有的安装yarn install
已经运行时,它仅需5分钟,添加一个新的依赖,这是因为如果我只是做慢yarn install
无node_modules
那里.
这是正常的吗?
我在Windows 10 x64上使用Yarn 0.17.9.我确实让Windows Defender忽略了我的项目目录和yarn全局缓存目录.
编辑:这是我做的一些基准测试结果.基于它们,似乎纱线添加实际上要快30-40%,真正的问题只是纱线在Windows上慢了500%
编辑2:我已确认尚未为项目和纱线缓存目录启用索引.但现在我已将纱线从0.16.1升级到0.17.9,并且Windows的速度提高了35-50%!但它仍然比Linux慢350-400%.我更新了基准测试.
对于Windows性能问题似乎存在Github问题:https://github.com/yarnpkg/yarn/issues/990
基准:
-
Windows - 纱线安装(缓存):
Done in 172.29s.
Run Code Online (Sandbox Code Playgroud)
Ubuntu - 纱线安装(缓存):
yarn install 48,75s user 11,32s system 117% cpu 51,161 total
Run Code Online (Sandbox Code Playgroud)
-
Windows - 纱线添加lodash:
Done in 143.11s.
Run Code Online (Sandbox Code Playgroud)
Ubuntu - 纱线添加lodash:
yarn add lodash 33,42s user 5,72s system 108% cpu 36,203 total
Run Code Online (Sandbox Code Playgroud)
-
仅供参考,Ubuntu基准测试在NTFS驱动器上的同一文件夹上运行.
用于基准测试的项目:https://github.com/amcsi/szeremi
我想配置我的PhpStorm IDE以在我的Docker容器中运行PHPUnit测试.
似乎我只能使用本地PHP可执行文件,或者通过SSH作为测试的解释器.
我可以在我的PHP容器上安装SSH服务,但它似乎是一个hacky解决方案,并且在线文章不鼓励在容器上安装SSH服务.
为了尝试让本地解释器工作,我尝试创建一个bash脚本来代理容器内对PHP的调用,如下所示:
#!/usr/bin/env bash
# Run PHP through Docker
docker exec -t mycontainer_php_1 php "$@"
Run Code Online (Sandbox Code Playgroud)
当我自己运行它时,这非常有效,但当我将PhpStorm指向它作为本地PHP解释器时,它不会将其识别为有效的PHP可执行文件.
那么什么是让这个工作的好方法?
无论是使用Facebook PHP SDK,还是仅使用curl加载数据$contents = file_get_contents("https://graph.facebook.com/$id?access_token=$accessToken")
,响应都需要大约一秒钟.
当我需要检查一堆id的数据时,这非常慢.
在浏览器中,如果我输入一个facebook图形网址,我几乎可以立即得到结果,在PHP的十分之一时间内.
是什么导致了这个问题,我怎样才能像在任何浏览器中那样快速地制作它?我知道浏览器可以做到这一点.必须有一种方法可以在PHP中快速实现它.
IDEA:也许我需要在cURL中配置一些东西?
我尝试过的:
file_get_contents()
是因为我希望PHP SDK没有正确配置.setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
.它没有任何区别.在回答编辑之后:实际上,这与重复使用卷曲手柄一起使后续请求非常快.编辑:这是我用来衡量执行请求所需时间的代码的粘贴框:http://pastebin.com/bEbuqq5g.我将过去常说微秒的文本更正为秒.这就产生了类似于我在这个问题的评论中所写的结果:Facebook图形在PHP中非常慢.另请注意,即使访问令牌已过期,它们也会采用类似的慢速时间,就像在我的pastebin示例中一样.
编辑2:ssl应该有部分问题.我尝试了http://graph.facebook.com/4(没有httpS)的基准测试,它导致三个请求的1.2秒,而相同,但https花了2.2秒.这绝不是一个解决方案,因为对于任何需要访问令牌的请求,我必须使用https.
资源的HTTP请求是随机的 - 大约1-5%的时间(每个资源,而不是每页加载) - 需要花费很长时间才能传送到浏览器(约20秒),甚至不会无限期地挂起.(服务器详细信息列在底部的列表中).
由于JavaScript资源挂在<head>
标记内,因此导致任何页面的每5个请求似乎挂起.
资源是css,js和小图像文件,由apache直接提供(没有脚本语言),尽管页面加载(涉及PHP或Rails)也很少挂起,与其他任何资源的机会相同(1-5%的时间) ,所以这似乎是一个与Apache Request相关的问题.
附加信息:
server-status
按照预期检查了闲置的工人,我仍有98%的闲置工人.虽然这可能是相关的,因为挂钩适用于FastCGI不提供的静态资源(资源是静态的).什么可能导致这些挂起,我怎么能解决这个问题?
我正在尝试npm install
在Dockerfile中执行,但即使在假定禁用颜色时,颜色代码似乎仍然出现在Dockerhub构建日志中.
我可能做错了什么?
您可以在Docker Hub上找到包含构建详细信息的Dockerfile:https://hub.docker.com/r/amcsi/szeremi/builds/btk4utf3whezxqhnbzpkhyw/
Dockerfile:
FROM node
MAINTAINER Attila Szeremi <attila+webdev@szeremi.com>
RUN mkdir /src
WORKDIR /src
RUN cd /src
# Copy just the package.json file file as a cache step.
COPY package.json /src/package.json
# Disable progress so npm would install faster.
# Disable colors, because Dockerhub can't display them.
# Install NPM packages excluding the dev dependencies.
RUN npm set progress=false && npm set color=false && npm install --production
COPY . .
RUN npm run …
Run Code Online (Sandbox Code Playgroud) 我正在为 API 编写功能测试,并且想测试自定义身份验证逻辑。
我知道当我调用登录 API 端点时,Laravel 会缓存用户已登录的事实,因此测试中的下一个 API 调用会认为用户已经通过身份验证...
因此,对于一个测试,如何禁用 Laravel 身份验证缓存魔法,以便我可以手动提供 Bearer 身份验证令牌来检查我的自定义身份验证逻辑是否有效?
我正在考虑清除 AuthManager 中的防护措施,或者完全清除 AuthManager,这样 Laravel 将被迫重新初始化它。但我没有运气弄清楚如何以有效的方式做到这一点。
这是一些伪示例代码:
public function testLogin()
{
$responseData = $this->post('/login', ['email' => $this->user->email, 'password' => 'password'])->json();
$this->get('/endpoint-requiring-auth')->assertOk();
//
// $this->logicToResetAuth() ?
//
$this->get('/endpoint-requiring-auth')->assertUnauthorized();
// I want to manually have to pass the token to get it to work now.
$this->get('/endpoint-requiring-auth', ['Authorization' => "Bearer $responseData[access_token]"])
->assertOk();
}
Run Code Online (Sandbox Code Playgroud)
此外,未知的重置逻辑应该会影响多个防护装置。
哦,是的,我正在围绕 JWT-Auth 库编写自定义逻辑。
使用图形api,当我查询用户或页面的订阅源时,有一些帖子已经被用户共享,我可以看到有关一个实体的数据部分中的共享数量的数据:
"shares": {
"count": 2
},
Run Code Online (Sandbox Code Playgroud)
当浏览Facebook时,在该帖子上,当我点击代表"显示共享"的图标时,会弹出一些内容,让我看到一些共享帖子的用户,根据评论"您只能看到公开或来自的共享朋友".那么有没有办法通过图形api从共享中获取用户数据?
我正在制作一个通过并行化暴力破解密码的程序。目前,要破解的密码已经以纯文本形式提供,我只是试图暴力破解它。
我有一个名为的函数generate_char_array()
,它基于整数种子,转换基数并返回一个u8
字符切片以尝试和检查。首先遍历字母表查找 1 个字符串,然后查找 2 个字符串,依此类推。
let found_string_index = (0..1e12 as u64).into_par_iter().find_any(|i| {
let mut array = [0u8; 20];
let bytes = generate_char_array(*i, &mut array);
return &password_bytes == &bytes;
});
Run Code Online (Sandbox Code Playgroud)
使用找到的字符串索引(或更确切地说种子整数),我可以生成找到的字符串。
问题是 Rayon 对我来说并行化的方式是将任意大整数范围分割成thread_count
-large 切片(例如,对于 4 个线程,0..2.5e11、2.5e11..5e11 等)。这不好,因为范围的末尾是任意超大密码长度(10+,我不知道),而大多数密码(包括我倾向于尝试的固定“zzzzz”)都短得多,因此我得到的是第一个线程完成所有工作,其余线程只是浪费时间测试太长的密码和同步;结果实际上比单线程性能慢。
我怎样才能将任意大范围(实际上不必有结束)分割成范围块,并让每个线程在块中找到?这将使不同线程中的工作人员真正有用。