小编Rya*_*art的帖子

Puppet/Facter"无法检索事实fqdn":如何修复或规避?

我正在学习木偶并尝试在家里的虚拟机上进行试验.我还没有使用木偶服务器,只是在本地运行.它工作正常,但每次运行时puppet apply ...,我都会延迟几秒钟,然后显示消息

warning: Could not retrieve fact fqdn
Run Code Online (Sandbox Code Playgroud)

我假设消息与延迟有关,我想摆脱它(延迟 - 我可以忍受消息).谷歌搜索解决方案似乎表明它与DNS查找有某种关系,但我真的找不到任何关于它的东西,这似乎令人惊讶.我想要的就是能够快速地在我的vm中应用清单,这样我就可以进行实验.我怎样才能加快速度?

更新:我没有在调试输出中看到任何额外的信息,但它看起来像这样:

$ puppet apply -dv puppet-1.pp 
warning: Could not retrieve fact fqdn
debug: Failed to load library 'rubygems' for feature 'rubygems'
debug: Failed to load library 'selinux' for feature 'selinux'
debug: Puppet::Type::File::ProviderMicrosoft_windows: feature microsoft_windows is missing
...
Run Code Online (Sandbox Code Playgroud)

更新:我添加了"ruby"标签,因为木偶的粉丝很少.如果这不属于红宝石,或者您知道更好的标签,请告诉我.

再次更新:我已经了解了更多关于puppet的内容,我现在明白这条消息来自名为"Facter"的组件,该组件嗅出了关于运行Puppet的系统的"事实".我找到了一些配置选项,并使用"certname","node_name""node_name_value",但我无法让延迟消失.有没有人具体知道如何告诉Facter忽略fqdn或如何让Facter能够在Ubuntu 11.10 vm上找到fqdn?

进展:

$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.1
Run Code Online (Sandbox Code Playgroud)

那是我的路由器,它通过Tomato运行Dnsmasq.

$ dig -x 192.168.1.129 192.168.1.1 …
Run Code Online (Sandbox Code Playgroud)

ruby puppet facter

47
推荐指数
4
解决办法
4万
查看次数

如何使Java应用程序自我更新?

问题:我有一个独立的Java应用程序(以下称为"代理"),它作为内部公司服务器上的服务运行.它充当某些中央服务器的远程代理.随着代理部署在更多地方,管理它们变得越来越复杂.具体来说:推送更新很痛苦,因为它是一个相当手动的过程,并且访问日志和有关运行代理的环境的其他信息是有问题的,这使得调试变得困难.正在讨论的服务器无头且无人值守,这意味着这必须是一个完全自动化的过程,无需人工干预,因此Java Web Start不是一个可行的解决方案.

建议的解决方案:定期将代理电话置于家中(到中央服务器)以提供代理状态并检查更新.

我对这个问题的其他建议解决方案持开放态度,但我已经有了一个关于"状态和自我更新"想法的工作原型,这就是这个问题所关注的问题.

我想出的实际上是一个单独的项目,充当代理的包装器.包装器通过HTTP定期调用中央服务器以检查代理的更新版本.找到更新后,它会下载新版本,关闭正在运行的代理,然后启动新版本.如果这看起来像一个奇怪的或迂回的解决方案,这里有一些值得注意的其他考虑/约束:

  1. 当包装器获得新版本的代理时,可能会有新的JAR依赖关系,这意味着类路径发生了变化,这意味着我可能想要生成一个单独的Java进程而不是摆弄ClassLoaders并冒着永久性内存泄漏的风险,需要人工干预 - 正是我想要摆脱的.这就是为什么我最终得到一个单独的"包装"过程来管理我的原型中的代理更新.
  2. 部署代理程序的某些服务器受资源限制,因此任何解决方案都需要CPU和内存使用率较低.这让我想要一个不涉及启动新JVM的解决方案,并且不需要单独的包装器进程.
  3. 代理已经部署到Windows和RHEL服务器,因此解决方案必须是跨平台的,尽管我不会有问题在批处理和bash脚本中复制合理数量的流程以使事情滚动.

:如上所述,我想知道如何制作自我更新的Java应用程序.更具体地说,是否有任何框架/库可以帮助我解决这个问题?在这方面有经验的人能给我一些指示吗?

java deployment installer auto-update automatic-updates

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

运行时"最终"是最终的吗?

我一直在玩ASM,我相信我成功地将final修饰符添加到了类的实例字段中; 然后我继续实例化所述类并在其上调用一个setter,它成功地改变了now-final字段的值.我的字节码更改有问题,还是仅由Java编译器最终强制执行?

更新:(7月31日)这里有一些代码供您使用.主要部分是

  1. 一个简单的POJO与private int xprivate final int y,
  2. MakeFieldsFinalClassAdapter,它使得它访问的每个字段都是final,除非它已经是,
  3. 和AddSetYMethodVisitor,它导致POJO的setX()方法也将y设置为它设置为x的相同值.

换句话说,我们从一个具有一个final(x)和一个非final(y)字段的类开始.我们让x最终.除了设置x之外,我们使setX()设置为y.我们跑.x和y都设置为没有错误.该代码在GitHub上.你可以用以下方法克隆它:

git clone git://github.com/zzantozz/testbed.git tmp
cd tmp/asm-playground
Run Code Online (Sandbox Code Playgroud)

需要注意的两件事:我首先提出这个问题的原因是:我做了最后一个字段和一个已经是最终字段的字段都可以设置为我认为是正常的字节码指令.

另一个更新:(8月1日)使用1.6.0_26-b03和1.7.0-b147进行测试,结果相同.也就是说,JVM在运行时愉快地修改了最终字段.

最终(?)更新:(9月19日)我正在从这篇文章中删除完整的源代码,因为它相当冗长,但它仍然可以在github上看到(见上文).

我相信我已经最终证明JDK7 JVM违反了规范.(请参阅Stephen的回答摘录.)如前所述,在使用ASM修改字节码后,我将其写回到类文件中.使用优秀的JD-GUI,这个类文件反编译为以下代码:

package rds.asm;

import java.io.PrintStream;

public class TestPojo
{
  private final int x;
  private final int y;

  public TestPojo(int x)
  {
    this.x = x;
    this.y = 1;
  }

  public int getX() {
    return this.x;
  }

  public void setX(int x) { …
Run Code Online (Sandbox Code Playgroud)

java java-bytecode-asm

24
推荐指数
2
解决办法
3647
查看次数

在java中同步对象,然后更改synchronized-on变量的值

我遇到了这样的代码

synchronized(obj) {

   obj = new Object();

}
Run Code Online (Sandbox Code Playgroud)

有些事情对此感觉不对,我无法解释,这段代码是否正常或者其中有什么问题,请指出.谢谢

java concurrency synchronization

21
推荐指数
3
解决办法
4617
查看次数

Ruby语法糖有"规则"吗?

我正在学习Ruby的基础知识(刚刚开始),我遇到了这个Hash.[]方法.它被引入

a = ["foo", 1, "bar", 2]
=> ["foo", 1, "bar", 2]
Hash[*a]
=> {"foo"=>1, "bar"=>2}
Run Code Online (Sandbox Code Playgroud)

经过一番思考,我发现这Hash[*a]相当于Hash.[](*a)Hash.[] *a.我的问题是为什么会这样.究竟是什么让你把*a方括号里面,是有某种规则对何时何否则"它"可以用吗?

编辑:我的措辞似乎引起了一些混乱.我不是在询问阵列扩展.我明白了.我的问题基本上是:如果[]是一个方法名称,为什么可以在括号内放置参数?看起来差不多 - 但不完全 - 就像说如果你有一个方法Foo.dood,并且你想把字符串传递"hey"给它,那么你就可以写了Foo.do"hey"od.

ruby

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

Maven JavaDoc:缺少所需的类

我正在运行 Maven 3.0 并清除了我的存储库,然后重建了存储库。当我使用“mvn clean install”时,我得到了一个成功的构建,但没有创建 JavaDocs。但是当我使用“mvn javadoc:aggregate”时,我收到了这个错误。我加载了 Maven Reporting (3.0) 并且仍然收到此错误,即使在将报告添加到依赖项之后也是如此。我尝试按照另一个问题/答案的建议删除配置部分和版本,但仍然存在相同的问题。

“无法在插件 'org.apache.maven-javadoc-plugin-2.8' 中加载 mojo 'javadoc' 缺少必需的类:org/apache/maven/reporting/MavenReport”

顺便说一句,有没有一种简单的方法可以在代码块中获取格式正确的 XML 文件?

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>groupid</groupId>
    <artifactId>D</artifactId>
    <version>1.0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>D</name>
    <description>Parent POM XML File</description>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <profiles>
        <profile>
            <activation>
                <jdk>[1.3,1.6)</jdk>
            </activation>
        </profile>
    </profiles>
    <modules>
        <module>One</module>
        <module>Two</module>
        <module>Three</module>
        <module>Four</module>
        <module>Five</module>
        <module>Six</module>
        <module>Seven</module>
        <module>Eight</module>
        <module>Nine</module>
        <module>Ten</module>
        <module>Eleven</module>
        <module>Twelve</module>
        <module>Thirteen</module>
    </modules>
    <dependencies>
        <dependency>
            <groupId>org.apache.abdera</groupId>
            <artifactId>abdera-bundle</artifactId>
            <version>1.1.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <type>jar</type>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
            <type>jar</type>
        </dependency> …
Run Code Online (Sandbox Code Playgroud)

plugins javadoc maven

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

这可以在Prolog中进行尾递归吗?

我正在学习Prolog,作为练习,我正在尝试一个简单的数据库来计算所有数字的总和,直到给定的数字(即0 = 0,1 = 1,2 = 3,3 = 6,4 = 10,...).很容易:

counting_sum(0, 0).
counting_sum(Num, Sum) :- Num > 0, PrevNum is Num - 1,
    counting_sum(PrevNum, PrevSum), Sum is Num + PrevSum.
Run Code Online (Sandbox Code Playgroud)

counting_sum(150000, X).随着堆栈溢出,它在某处爆炸.我知道Prolog可以做尾递归,但如果我将递归调用移到规则的末尾,我得到

error(instantiation_error,(is)/2)
Run Code Online (Sandbox Code Playgroud)

我假设它告诉我PrevSum在统一之前我不能使用它counting_sum(PrevNum, PrevSum).这是正确的,有没有办法让这个尾递归?我正在使用GNU Prolog 1.3.1,如果这有任何区别.

PS我的术语仍然不稳定.如果我错误地使用了这些条款,请告诉我.

stack-overflow recursion tail-recursion prolog instantiation-error

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

如何在胡子模板中引用包含点的字段名称?

如何在胡子模板中引用包含点的字段名称?例如,如果我有一个类似的观点

{
  "foo.bar": "my value"
}
Run Code Online (Sandbox Code Playgroud)

那我怎么能把my value模板放进去?使用{{foo.bar}}不起作用,因为胡子认为点是路径的一部分,就像应该有一个"条"的"foo".

template-engine mustache

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

带有jquery移动样式的JQuery-File-Upload按钮

我使用jquery-file-upload插件和jquery-1.8.3以及jquery-mobile-1.2.它工作正常.

但今天,我更新到jquery-1.9和jquery-mobile-1.3,按钮样式已经改变.

我把它们添加到了jsfiddle.我希望它看起来像这样

<span class="fileinput-button" data-role="button" data-icon="plus">
<span>????</span>
<input type="file" name="files[]" multiple />
</span>
Run Code Online (Sandbox Code Playgroud)

但它看起来像那样

<span class="fileinput-button" data-role="button" data-icon="plus">
<span>????</span>
<input type="file" name="files[]" multiple />
</span>
Run Code Online (Sandbox Code Playgroud)

谢谢.

css jquery jquery-mobile

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

泽西servlet异常tomcat

我很难尝试启动一个简单的Jersey - Spring webapp.我尝试访问Web资源时从Tomcat获得的错误是:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet.init() for servlet Jersey Spring Web Application threw exception
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    java.lang.Thread.run(Thread.java:619)

root cause

com.sun.jersey.api.container.ContainerException: No WebApplication provider is present
    com.sun.jersey.spi.container.WebApplicationFactory.createWebApplication(WebApplicationFactory.java:69)
    com.sun.jersey.spi.container.servlet.ServletContainer.create(ServletContainer.java:391)
    com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.create(ServletContainer.java:306)
    com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:607)
    com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210)
    com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:373)
    com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:556)
    javax.servlet.GenericServlet.init(GenericServlet.java:212)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    java.lang.Thread.run(Thread.java:619)

note The full stack trace of the root cause is available in the Apache …
Run Code Online (Sandbox Code Playgroud)

tomcat servlets jersey

4
推荐指数
1
解决办法
3万
查看次数

看来整数变量i是不可见的

for (int i = 0; i < 9; i++)
{
    b[i].setOnClickListener(
        new OnClickListener()
        {
            public void onClick(View v)
            {
                justclicked(i);
            }
        }

    );
}
Run Code Online (Sandbox Code Playgroud)

我试图使用for循环在九个按钮上放置一个动作监听器.上面的代码给了我一个错误.由i的值引起的错误是不可见的吗?非常感谢,世界级专家@ Stack Overflow !!

java android

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