一个鲜为人知的内置Perl功能是属性.然而,官方文档在介绍该概念的新手方面做得相当糟糕.与此同时,像Catalyst这样的框架广泛使用属性,这似乎使许多事情变得更容易.由于在不知道其含义的情况下使用了一些东西,我想知道细节.语法方面,它们看起来像Python的装饰器,但文档意味着更简单的东西.
你能解释(如果可能的话,还有现实世界的例子)什么属性有利于什么以及门后会发生什么?
在讨伐令我的应用程序pip-installable,我打大打架setuptools和distribute.我假设我的依赖项是正确的,即安装pip install myapp可能应该正确填充虚拟环境.但是,我想在我开始的时候简化开发,所以我的目标是从一个空的virtualenvmake开始setup.py test(后来setup.py develop,但这是一个完全不同的斗争)用所有定义的依赖项填充它.
现在我的问题是:无论我怎么努力,我得到的都是依赖项安装.egg在我的项目目录中,这至少是次优的.我尝试创建一个setuptools可以使用的新命令pip(虽然看起来很笨拙但看起来很有用),但这不能成为解决方案(子类化和重写).
那么如何setup.py test填充virtualevn而不是我的工作目录呢?
我仍然围绕着Kubernetes,以及它应该如何运作.目前,我正在努力理解如何像用流复制,向外扩展和自动故障转移/故障恢复PostgreSQL的集群模式(pgpool-II,repmgr,挑选你的毒药).
我对该方法的主要问题是PostgreSQL实例的双重性质,配置方面 - 它是主服务器或冷/热/热备用服务器.如果我增加了副本的数量,我希望它们都能作为备用数据库出现,所以我想要创建一个postgresql-standby独立于postgresql-masterpod 的复制控制器.但是我也希望其中一个备用数据库能够在当前主服务器关闭的情况下成为主服务器,所以它postgresql毕竟是一个常见的复制控制器.
到目前为止,我唯一的想法是将复制配置放在外部卷上,并管理容器外的状态和状态更改.
(在PostgreSQL的情况下,配置可能已经在其data目录中的一个卷上,这本身显然是我想要的卷,但这不是重点)
这是正确的接近,还是有其他更清洁的方式?
我经常使用shift解压缩函数参数:
sub my_sub {
my $self = shift;
my $params = shift;
....
}
Run Code Online (Sandbox Code Playgroud)
然而,我的同事们很多人都在讲道,这shift实际上是邪恶的.你能解释我为什么要这样做吗?
sub my_sub {
my ($self, $params) = @_;
....
}
Run Code Online (Sandbox Code Playgroud)
到shift?
比方说,一个程序员团队正在Perl中使用Web应用程序git来管理他们的代码.现在,他们的模块版本化有一个小问题:
Perl::Critic和PBP都建议$VERSION在代码中使用RCS支持的变量git明确建议不要在代码中使用可替换的修订版号(有充分的理由)我理解为什么git不做关键字扩展.但是,我可以完全理解对一些代码的修订号的需要:
use用于打包和测试的全球产品版本可以使用标签轻松实现git describe,但我仍然没有看到为单个模块引入自动版本控制的方法.
你有什么解决方案吗?
我目前的项目正在扩展地理位置,所以我正在尝试集成GeoDjango并为初学者导入一些shapefile.我的设置包括以下内容:
South 正在整个项目中使用现在我已经在我的区域的新应用程序中创建了一个GeoDjango模型.像往常一样,我已经完成了./manage.py schemamigration --initial,当我尝试做的时候./manage.py migrate $my_new_app --database="gis",它失败了django.db.utils.DatabaseError: no such table: south_migrationhistory,这是我猜的正确,因为south_migrationhistory在我的主数据库中.
有没有人有这样的设置经验,可以帮助我吗?
编辑:我已经改变了标题,因为我意识到这个问题实际上不是GeoDjango特有的.
显然有两种不同的方法可以在Django中返回404错误:返回一个HttpResponseNotFound对象或引发一个Http404异常.虽然我在我的项目中使用前者,但似乎Django的内部视图主要使用后者.除了"异常是特殊的"口头禅之外,两种方式之间有什么区别,我应该使用哪种方式?
在最近的版本docker-compose中,它会自动为其创建的服务创建新网络.基本上,每个docker-compose设置都有自己的IP范围,因此理论上我可以使用预定义的端口在网络的IP地址上调用我的服务.这在同时开发多个项目时非常棒,因为不需要更改端口docker-compose.yml(即我可以nginx在不同接口上的端口8080上同时运行多个项目)
但是,这不能按预期工作:每个公开的端口仍然在0.0.0.0上公开,因此与多个项目存在端口冲突.可以将绑定IP放入docker-compose.yml,但这是可移植性的杀手 - 并非团队中的每个开发人员都使用相同的操作系统或在相同的项目上工作,因此不清楚要配置哪个IP.
根据为此特定项目创建的网络,定义将容器绑定到的IP非常棒.docker-compose应该知道它创建了哪个网络以及它的IP,所以这不应该是一个问题,但我找不到一个简单的方法来做到这一点.有没有办法或者这个东西还有待实施吗?
编辑:端口冲突的一个例子:想象两个项目,每个项目在端口8080上运行的应用服务器和在端口3306上运行的MySQL数据库,两者分别暴露为"8080:8080"和"3306:3306".运行第一个docker-compose创建一个名为app1_networkIP范围为172.18.0.0/16的网络.每个公开的端口都在0.0.0.0上公开,即在127.0.0.1上,在WAN地址,默认网桥(172.17.0.0/16)和172.18.0.0/16上公开.在这种情况下,我可以访问我的应用程序服务器127.0.0.1:8080,172.17.0.1:8080,172.18.0.1:8080和als on $WAN_IP:8080.如果我现在启动第二个应用程序,它会启动第二个网络app2_network172.19.0.0/16,但仍尝试绑定所有接口上的每个公开端口.当然已经采用了这些端口(172.19.0.1除外).如果有可能将每个应用程序限制在其网络中,则应用程序1可用于172.18.0.1:8080,第二个应用程序可用于172.19.0.1:8080,我不需要将端口映射分别更改为8081和3307同时运行两个应用程序.
我想我在Params :: Validate中遇到过一个错误,但我不确定我是否正确识别出有问题的代码.有问题的代码无法通过链传递异常(使用Try :: Tiny),所以我开始调试并发现try块内使用的类有一个析构函数.这个析构函数调用使用Params::Validate和查看Validate.pm 源代码的对象方法,我看到eval没有$@本地化,即全局$@被覆盖.
现在我看到两个选项:
Params::Validate应始终本地化$@,因此这是一个应报告的错误.Params::Validate在析构函数中使用.Params::Validate可以保持现状.哪一个?我该如何处理这种情况?
PS:我认为CPAN模块应该坚如磐石,既不会破坏自己也不会破坏环境,因此问题标题.
Common Lisp的人有他们的CL-WHO,它使HTML模板与"主要"语言集成,从而使任务更容易.对于那些不了解CL-WHO的人来说,它看起来像这样(例如来自CL-WHO的网页):
(with-html-output (*http-stream*)
(:table :border 0 :cellpadding 4
(loop for i below 25 by 5
do (htm
(:tr :align "right"
(loop for j from i below (+ i 5)
do (htm
(:td :bgcolor (if (oddp j)
"pink"
"green")
(fmt "~@R" (1+ j))))))))))
Run Code Online (Sandbox Code Playgroud)
你知道其他语言的这样的图书馆吗?我所知道的(模仿CL-WHO)是BrevéforPython.我对Perl风格特别感兴趣,但有趣的是其他语言如何处理将HTML集成到他们的语法中.
perl ×5
django ×2
docker ×2
python ×2
attributes ×1
common-lisp ×1
distribute ×1
django-orm ×1
django-south ×1
django-views ×1
eval ×1
exception ×1
git ×1
html ×1
kubernetes ×1
parameters ×1
postgresql ×1
setuptools ×1
shift ×1
templating ×1
versioning ×1
virtualenv ×1