小编Igo*_*any的帖子

覆盖配方中的属性

假设我在食谱中有一个默认属性:

default.nginx_upstreams = {
    'service1' => ['service1.server.com'],
    'service2' => ['service2.server.com'],
}
Run Code Online (Sandbox Code Playgroud)

然后它会在角色和环境中被修改和覆盖,直到它最终到达我的配方.在那里,我计算了一些我想要添加到属性的附加服务.如果我做这样的事情:

node.nginx_upstreams.merge! {'service3' => ['service3.server.com']}
Run Code Online (Sandbox Code Playgroud)

然后当我尝试使用属性在我的模板,我得到了undefined method 'each' for nil:NilClass我的模板时,我尝试做

<% node.nginx_upstreams.each do |name, servers| %>
Run Code Online (Sandbox Code Playgroud)

另外,我也得到了WARN: Setting attributes without specifying a precedence is deprecated and will be removed in Chef 11.0.有用的警告告诉我如何以正常优先级设置属性(显然,使用node.set["key"] = "value",但不告诉我如何指定默认或覆盖属性.

通过这样做,我可以解决这个问题:

upstreams = node.nginx_upstreams.to_hash
upstreams.merge! {'service3' => ['service3.server.com']}

template "nginx_config" do
    variables({:upstreams=>upstreams})
end
Run Code Online (Sandbox Code Playgroud)

但这感觉就像一个黑客.我在这个页面node.set()之外找不到任何文档,这也表明你可以在配方中设置正常和覆盖属性,但没有说明如何.

那么......你如何从配方中正确设置属性(与其他所有东西深度融合)?这个node.set()电话实际上做了什么,我可以告诉它我想要合并的优先级吗?

chef-infra chef-recipe

38
推荐指数
3
解决办法
7万
查看次数

如何在mysql中使用UPDATE原子声明行或资源

我有一个资源表(比方说汽车),我想原子地声称.然后,我想知道我刚才声称的资源.

如果每个用户有一个资源限制,我可以执行以下操作:

UPDATE cars SET user = 'bob' WHERE user IS NULL LIMIT 1
SELECT * FROM cars WHERE user = 'bob'
Run Code Online (Sandbox Code Playgroud)

这样,我原子地声明了资源,然后我可以看到我刚刚声明了哪一行.

当'bob'可以声称多辆车时,这不起作用.我意识到我可以获得已经由鲍勃声称的汽车列表,声称另一辆汽车,然后SELECT再次看到发生了什么变化,但这感觉很乱.

我想知道的是,有什么方法可以看到我刚刚使用上一次更新更新了哪些行?

如果做不到这一点,还有其他一些技巧可以原子地声称一行吗?我真的想避免使用SERIALIZABLE隔离级别.如果我做这样的事情:

1 SELECT id FROM cars WHERE user IS NULL
2 <here, my PHP or whatever picks a car id>
3 UPDATE cars SET user = 'bob' WHERE id = <the one i picked>
Run Code Online (Sandbox Code Playgroud)

这就REPEATABLE READ足够了吗?换句话说,我可以保证其他一些交易不会声明我的软件在第2步中选择的行吗?

mysql resources transactions atomic

14
推荐指数
2
解决办法
6593
查看次数

使用preg_match检测网址?在字符串中没有http://

我想知道如何在preg_match中检查一个字符串被分解成一个数组,看它是否以www开头.我已经有一个检查http:// www.

function isValidURL($url)
{
return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
}

$stringToArray = explode(" ",$_POST['text']);

  foreach($stringToArray as $key=>$val){
  $urlvalid = isValidURL($val);
  if($urlvalid){
  $_SESSION["messages"][] = "NO URLS ALLOWED!";
  header("Location: http://www.domain.com/post/id/".$_POST['postID']);
     exit();
     }
     }
Run Code Online (Sandbox Code Playgroud)

谢谢!斯特凡

php regex url preg-match

11
推荐指数
2
解决办法
6万
查看次数

暂停一个过程?

有没有办法暂停一个进程(从一个可执行文件运行),以便它在暂停时停止cpu加载,并等待它被取消暂停继续它的工作?可能是在python中,或者以某种方式可以通过python访问.

python signals process

11
推荐指数
2
解决办法
1万
查看次数

术语平面文件来自哪里?

我想知道是否有人知道."扁平"是否与层级相反?它是否来自"这是一个平坦的常规文件"之类的短语?

history flat-file

10
推荐指数
1
解决办法
1045
查看次数

python中的稀疏文件用法

我在python中创建稀疏文件如下:

>>> f = open('testfile', 'ab')
>>> f.truncate(1024000)
>>> f.close()
Run Code Online (Sandbox Code Playgroud)

文件完成后,占用0个磁盘空间,但其inode大小设置为我的截断值(1000K):

igor47@piglet:~/test$ ls -lh testfile 
-rw-r--r-- 1 igor47 igor47 1000K 2010-07-09 04:02 testfile
igor47@piglet:~/test$ du -hs testfile 
0   testfile
Run Code Online (Sandbox Code Playgroud)

如何在python中获取文件的实际空间使用量(分配大小)?该stat调用返回文件的表观大小,我不知道如何获得除了读取整个文件之外的其他实际用法(它可能会变得非常大)

>>> os.stat('testfile').st_size
1024000
Run Code Online (Sandbox Code Playgroud)

python macos file filesize sparse-file

9
推荐指数
1
解决办法
3374
查看次数

大厨11:任何方式将属性转换为红宝石哈希?

我正在使用chef属性为我的服务生成配置.但是,在某些时候,我需要将属性mash转换为简单的ruby哈希.这曾经在Chef 10中正常工作:

node.myapp.config.to_hash
Run Code Online (Sandbox Code Playgroud)

但是,从Chef 11开始,这不起作用.只有属性的顶级转换为散列,然后嵌套值保持不可变的mash对象.修改它们会导致这样的错误:

Chef :: Exceptions :: ImmutableAttributeModification ------------------------------------------- -----如果未指定要设置的优先级,则节点属性是只读的.要设置属性,请使用类似`node.default ["key"] ="value"'的代码

我已经尝试了一些解决这个问题的方法,但是没有用:

node.myapp.config.dup.to_hash
JSON.parse(node.myapp.config.to_json)
Run Code Online (Sandbox Code Playgroud)

json解析hack,看起来应该很好用,导致:

JSON::ParserError
unexpected token at '"#<Chef::Node::Attribute:0x000000020eee88>"'
Run Code Online (Sandbox Code Playgroud)

有没有任何实际可靠的方法,除了在每个cookbook中包含嵌套解析函数,将属性转换为简单,普通,好的旧ruby哈希?

ruby hash attributes chef-infra

8
推荐指数
2
解决办法
6835
查看次数

HTML:表格表格?

我经常发现自己想要创建一个表格表 - 一堆行,每行是一个单独的表单,有自己的字段和提交按钮.例如,这是一个宠物店应用示例 - 想象一下这是一个结账屏幕,您可以选择更新您选择的宠物的数量和属性,并在退房前保存您的更改:

Pet    Quantity Color Variety   Update
snake         4 black rattle    update
puppy         3 pink  dalmatian update
Run Code Online (Sandbox Code Playgroud)

我希望能够使用看起来像这样的HTML来做到这一点:

<table> 
<thead><tr><th>Pet</th> <th>Quantity</th> <th>Color</th> <th>Variety</th> <th>Update</th></tr></thead>
<tbody>
     <tr>
          <form>
            <td>snake<input type="hidden" name="cartitem" value="55"></td>
            <td><input name="count" value=4/></td>
            <td><select name="color"></select></td>
            <td><select name="variety"></select></td>
            <td><input type="submit"></td>
          </form>
     </tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

这基本上是一个表格,每行一个表格.点击更新一次允许您更新该特定行(这不是一个真实的例子,我的真实应用程序确实需要行的独立性).

但这不是有效的HTML.根据规范,a <form>必须完全位于a <td>或完全位于a之外<table>.这个无效的html打破了javascript库,是一个巨大的痛苦处理.

我最终创建一个表来包含列标题,然后为每个表单创建一个表.但这需要固定的列宽,使输入排列整齐的列,这是低于标准的.你最终如何处理这个问题?我缺少一个明显的简单解决方案吗?如何制作表格表格?

html forms design-patterns specifications coding-style

6
推荐指数
2
解决办法
8301
查看次数

在git中存储和生产分支之间存储差异的位置?

我有一个我从git存储库管理的项目.我们使用progit分支策略(如接受的答案中所述,这里:小开发团队的Git分支策略),其中一个分支是生产分支,另一个分支是开发/测试分支.我们使用fabric部署代码.

当我们准备使用git创建新的生产版本时,我们将开发/测试分支合并到生产分支中,然后使用结构部署生产分支.问题是开发和生产之间存在代码差异 - 一些徽标更改,一些不同的数据库主机/凭据等等.我一直在保存包含差异的.patch文件,并且在部署生产环境时使用结构应用补丁,但这不能很好地工作.特别是,如果补丁周围的某些代码发生了变化,它将完全失败 - 补丁无法应用,我的部署将中止.

我一直在想我是否应该直接将所有更改应用到生产分支?这有什么缺点?

我关心的一个特殊用例是我们是否需要制作修补程序.我们目前通过从生产环境分支,进行更改,然后将该分支合并回开发和生产来实现这一目标.如果生产分支与开发分支不同,那么当修补程序合并到开发中时,这些更改是否会被拉入开发分支?

git deployment branch fabric branching-and-merging

6
推荐指数
1
解决办法
2307
查看次数

在svg中设置默认单位(Python svgwrite)

我正在使用python的svgwrite生成SVG图形.每当我想要画一些东西时,我发现自己做了这个丑陋的尴尬事情:

line = drawing.line(start = "%dmm" % start, end = "%dmm" % end)
Run Code Online (Sandbox Code Playgroud)

我希望我能做到:

line = drawing.line(start = start, end = end)
Run Code Online (Sandbox Code Playgroud)

有没有办法将整个svg绘图的默认单位设置为'mm'?

python svg cad

5
推荐指数
1
解决办法
3807
查看次数