想象一下,你有2个实体,玩家和团队,玩家可以在多个团队中.在我的数据模型中,我有一个每个实体的表,以及一个用于维护关系的连接表.Hibernate可以很好地处理这个问题,但是我如何在RESTful API中公开这种关系呢?
我可以想几个方面.首先,我可能让每个实体都包含另一个实体的列表,因此Player对象将拥有它所属的Teams列表,并且每个Team对象都有一个属于它的Players列表.因此,要向团队添加播放器,您只需将播放器的表示形式发布到端点,例如POST /player或POST /team,并将相应的对象作为请求的有效负载.这对我来说似乎是最"RESTful"但感觉有点奇怪.
/api/team/0:
{
name: 'Boston Celtics',
logo: '/img/Celtics.png',
players: [
'/api/player/20',
'/api/player/5',
'/api/player/34'
]
}
/api/player/20:
{
pk: 20,
name: 'Ray Allen',
birth: '1975-07-20T02:00:00Z',
team: '/api/team/0'
}
Run Code Online (Sandbox Code Playgroud)
我能想到的另一种方法就是将关系本身作为一种资源来揭露.因此,要查看给定团队中所有玩家的列表,您可以执行GET /playerteam/team/{id}或类似的操作并获取PlayerTeam实体列表.要将球员添加到球队,请/playerteam使用适当构建的PlayerTeam实体作为有效负载进行POST .
/api/team/0:
{
name: 'Boston Celtics',
logo: '/img/Celtics.png'
}
/api/player/20:
{
pk: 20,
name: 'Ray Allen',
birth: '1975-07-20T02:00:00Z',
team: '/api/team/0'
}
/api/player/team/0/:
[
'/api/player/20',
'/api/player/5',
'/api/player/34'
]
Run Code Online (Sandbox Code Playgroud)
这是什么最好的做法?
我的docker镜像是在Jenkins CI服务器上构建的,并被推送到我们的私有Docker Registry.我的目标是使用docker-compose配置环境,它始终启动图像的最初构建状态.
我目前在不同的机器上使用docker-compose 1.3.2以及1.4.0,但我们之前也使用过旧版本.
我总是使用docker-compose pull && docker-compose up -d命令从注册表中获取新图像并启动它们.我相信我的首选行为在某个时间点按预期工作,但从那时起docker-compose up开始重新运行先前停止的容器,而不是每次都启动最初构建的映像.
有没有办法摆脱这种行为?这种方式可能是在docker-compose.yml配置文件中连接的,在每次调用时都不依赖于"忘记"命令行中的某些内容吗?
PS.除了找到实现目标的方法之外,我还想更多地了解这种行为的背景.我认为Docker的基本思想是构建一个不可变的基础架构.docker-compose的当前行为似乎与这种方法完全冲突..或者我在这里错过了一些观点?
我正在使用Webpack构建一个Angular 1.4项目.该项目使用了几个jQuery插件,这些插件包含在angular指令中.那些指令在内部使用angular.element,可能暗示angular.element是真正的jQuery,而不是jqLite.
我想使用angular来自动检测jQuery并使用它代替jqLite.我试图在我的入口点模块中本地需要jquery app.js:require('jquery')并使用全局公开jQuery require(expose?$!expose?jQuery!jquery).
不过,无论我做什么,都angular.element指的是jqLite.
我的研究得出了一些结论:
window.angular,所以我不需要expose使用Webpack:当作为CommonJS模块加载时,Angular会将自身全局分配给`window.angular`吗?.require('jquery')其中.我不是100%肯定,但看起来像角不访问jQuery直接,相反,它试图访问从全局命名空间window.jQuery中bindJQuery的功能,所以这也是没有办法:暴露了jQuery用的WebPack真正的Window对象.imports-loader似乎不合适:Angular想要window.jQuery,而不仅仅是jQuery.expose-loader,jquery使它成为窗口对象.我的问题是,Babel将其所有导入提升到生成的代码中的模块顶部.因此,虽然在源文件require(expose?jquery!jquery)之前,但是在jquery之前import angular from "angular",bundle require("angular")中位于文件的顶部,因此在导入Angular时,jquery尚不可用.我想知道,如何使用带有ECMA6导入语法的Webpack加载器.import语法而不是require语法与jquery:import "jquery"或者import $ from "jquery",不是require(jquery):(Petr Averyanov:如何使用ECMAScript 6导入的Webpack加载器语法(导入/导出/公开)?).jquery源代码包装有一个特殊的包装器,它确定了如何需要jquery(使用AMD/require,CommonJS或global with <script>语句).基于此,它 …我正在尝试调试模块"main",它在"another_module"的第356行调用一个函数"broken_function".我在该函数中遇到错误,并希望在其开头添加断点.以下是列表.难道我做错了什么?原因,断点不起作用:
$ python -m pdb main
(Pdb) import sys
(Pdb) sys.path.append("/home/user/path/to/another/module")
(Pdb) import another_module
(Pdb) b another_module:356
Breakpoint 1 at /home/user/path/to/another/module/another_module.py:356
(Pdb) c
Traceback (most recent call last):
...
File "/home/user/path/to/another/module/another_module.py", line 383, in broken_function
f=open("../jobs/temptree.tre", "r")
IOError: [Errno 2] No such file or directory: '../jobs/temptree.tre'
Uncaught exception. Entering post mortem debugging
...
Run Code Online (Sandbox Code Playgroud) 请考虑以下情况:内核耗尽了物理RAM并需要换出页面.它选择最近最少使用的页面框架,并希望将其内容交换到磁盘并将该框架分配给另一个进程.
困扰我的是,这个页面框架已经映射到一般来说,几个(相同的)几个进程的页面.内核必须以某种方式找到所有这些进程并将页面标记为已换出.它是如何实现的?
谢谢.
编辑:问题的插图:
在交换过程1和2之前有一个共享的Page 1,它位于物理内存帧1中:

现在,系统中的内存耗尽,内核通过从第1帧交换第1页并将其替换为第2页来为进程3分配内存.为了做到这一点,它必须
1)找到所有流程,参考第1页(在我们的案例中为流程1和流程2)
2)修改其页表条目,将"Present"位设置为0并在Swap中设置Page 1位置

所以,我不知道,第1步是如何进行的.内核不能只是迭代地查看每个进程的页表,以便找到指向第1帧的页表条目.应该存在从页框到页表条目的某种反向映射.
答案是:
"页表管理最重要和最重要的变化是引入了反向映射(rmap).将其称为"rmap"是故意的,因为它是"首字母缩略词"的常见用法,不应与-rmap混淆由Rik van Riel开发的树,它对库存VM的更多改动而不仅仅是反向映射.
在一个句子中,rmap授予定位所有PTE的能力,这些PTE仅在给定结构页面的情况下映射特定页面.在2.4中,找到映射共享页面的所有PTE(例如内存映射共享库)的唯一方法是线性搜索属于所有进程的所有页表.这太昂贵了,Linux试图通过使用交换缓存来避免这个问题(参见11.4节).这意味着对于许多共享页面,无论页面使用时间和使用模式如何,Linux都可能必须更换整个进程.2.6而是有一个与每个结构页面相关联的PTE链,可以遍历该页面以从引用它的所有页面表中删除页面.这样,LRU中的页面可以以智能方式交换出来,而无需交换整个过程."
从了解Linux内存管理,"Linux2.6中的新功能"
我将我的容器的docker端口暴露给主机
docker run -p 80:80 ...
Run Code Online (Sandbox Code Playgroud)
然后我尝试显示所有监听端口以进行调试,netstat例如:
netstat -at
Run Code Online (Sandbox Code Playgroud)
奇怪的是,netstat不会显示具有暴露端口的docker容器,尽管他们正在监听并回复浏览器.
如何netstat显示这些暴露的端口?
更新: 我在Debian 8 Jessie上运行它.这是我做的:
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9dfa08bab50d workflows-nginx "/bin/sh -c '/usr/sbi" 2 hours ago Up 2 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp workflows-nginx
d0b0c3f90f13 workflows-django "/bin/sh -c 'python /" 7 hours ago Up 3 hours 0.0.0.0:8000->8000/tcp workflows-django
99a857c92533 workflows-db "/docker-entrypoint.s" 7 hours ago Up 3 hours 5432/tcp workflows-db
Run Code Online (Sandbox Code Playgroud)
这里docker报告容器端口被转发到主机.此外,如果我停止workflows-nginx容器,它将停止通过http(端口80)回答浏览器.如果我再次启动它,它会再次开始响应.
这是输出sudo netstat -at | less:
Active …Run Code Online (Sandbox Code Playgroud) 你能提供一个WSGI start_response功能的真实例子吗?(Web服务器为wsgi应用程序提供该功能)
我无法理解引入的目的start_response.
(我喜欢阅读有关WSGI标准的10个相同的文本.他们都说"WSGI标准是......"他们没有说"WSGI设计这样才能 ......" :()
Django REST Framework中的一个非常标准的任务是提供附加args/ kwargs序列化程序,以设置不通过设置的字段值request.data,但通过url参数或cookie中的值.例如,我需要将user我的Comment模型的字段设置为等于request.userPOST请求.这些额外的参数称为上下文.
几个问题(1,2 StackOverflow上)认为我重写get_serializer_context()我的方法ModelViewSet.我做了,但没有帮助.我试图理解,出了什么问题,并发现我从源代码中无法理解,这个上下文系统应该如何工作.(关于此事的文件也缺失了)
任何人都可以解释,序列化程序在正常请求数据中添加上下文?我发现了两个地方,它从上下文中保存了值.
__new__(),它缓存args和kwargs,但似乎以后没有人读过它们.