小编Jan*_*yne的帖子

在Vagrant完成所有配置后,是否可以在虚拟机上运行脚本?

我正在使用Vagrant v1.5.1来创建虚拟机(VM)群集.配置完所有虚拟机后,是否可以在其中一台机器上运行单个脚本?我想运行的脚本将从一个VM设置无密码SSH到所有其他VM.

例如,我在Vagrant(CentOS 6.5)中配置的节点如下.

  • 节点1
  • 节点2
  • 节点3
  • 节点4

Vagrantfile看起来如下.

(1..4).each do |i|
 config.vm.define "node-#{i}" do |node|
  node.vm.box = "centos65"
  ...omitted..
 end
end
Run Code Online (Sandbox Code Playgroud)

完成所有这些操作后,我需要在node1上运行脚本以启用无密码SSH到node2,node3和node4.

我知道您可以在配置每个VM时运行脚本,但在这种情况下,我希望在配置所有VM后运行脚本,因为我需要启动并运行所有VM才能运行最后一个脚本.

在Vagrant中这可能吗?

我意识到我也可以向后迭代.

r = 4..1
(r.first).downto(r.last).each do |i|
 config.vm.define "node-#{i}" do |node|
  node.vm.box = "centos65"
  ...omitted..
  if i == 1
   node.vm.provision "shell" do |s|
    s.path = "/path/to/script.sh"
   end
  end
 end
end
Run Code Online (Sandbox Code Playgroud)

这将很好用,但实际上,我还需要设置从node2到node1,node3和node4的无密码SSH.在上面的方法中,这只能用于node1,但不适用于node2(因为node1不会被配置).

如果有一个Vagrant插件允许在我的集群中的所有节点之间进行密码SSH,那甚至会更好.

ruby vagrant vagrantfile centos6.5

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

JavaScript Promise是异步的吗?

只是一个澄清的简单问题:JavaScript Promise异步吗?我一直在阅读很多帖子Promise和异步编程(即ajax请求).如果Promise不是异步,我们如何做到这一点?

例如,我有一个函数来包装的功能f与参数数组args内的Promise.没有什么f本质上是异步的.

function getPromise(f, args) {
 return new Promise(function(resolve, reject) {
  var result = f.apply(undefined, args);
  resolve(result);
 });
}
Run Code Online (Sandbox Code Playgroud)

为了使这个异步,我阅读了一些SO帖子,并决定setTimeout很多人建议使代码无阻塞.

function getPromise(f, args) {
 return new Promise(function(resolve, reject) {
  setTimeout(function() { 
   var r = f.apply(undefined, args);
   resolve(r);
  }, 0);
 });
}
Run Code Online (Sandbox Code Playgroud)

这种方法是否setTimeout可以使代码在内部无阻塞Promise

(请注意,我不依赖于任何第三方Promise API,只是浏览器支持的内容).

javascript asynchronous promise

8
推荐指数
1
解决办法
4928
查看次数

原生离子2地理定位不适用于Android设备

我正在使用本机Ionic 2 Geolocation插件,它无法按预期工作.首先,我添加插件.

ionic plugin add cordova-plugin-geolocation
Run Code Online (Sandbox Code Playgroud)

然后我导入插件并发出调用以获取当前位置.

import { Geolocation } from 'ionic-native';
import { Geoposition, GeolocationOptions } from 'ionic-native/dist/plugins/geolocation';

export class MyComponent {
 protected getLocation():Promise<Geoposition> {
  let options:GeolocationOptions = {
   maximumAge: 0, timeout: 5000, enableHighAccuracy: false
  };
  return Geolocation.getCurrentPosition(options)
   .catch(error => { console.error(error.message) };
 }
}
Run Code Online (Sandbox Code Playgroud)

我还检查了我的AndroidManifest.xml.

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)

我注意到总是超时超时.如果我把它保留为默认值(默认情况下超时设置为无穷大),那么大约20分钟后,我确实得到了一个地理位置.当然,20分钟并不理想.

我也试过使用navigator如下.但我得到了完全相同的结果.

navigator.geolocation.getCurrentPosition(
 position => {
  console.info('using navigator');
  console.info(position.coords.latitude);
  console.info(position.coords.longitude);
 },
 error => {
  console.warn('using navigator');
  console.warn(error.code);
  console.warn(error.message);
 },
 options
);
Run Code Online (Sandbox Code Playgroud)

测试时Chrome …

android cordova cordova-plugins ionic2 angular

8
推荐指数
1
解决办法
9399
查看次数

如何使用spring security以编程方式记录用户

我正在使用spring security v3.1.4.我想要实现的是让管理员能够注销常规用户(使他的会话无效).用户只能在任何给定时间登录一次,但如果他忘记退出,那么当他尝试从其他位置登录时,他将无法登录.所以他会把一张票给管理员和管理员将使他之前登录的所有会话无效(希望只有一个).

在我的web.xml中,我有以下定义.

<listener>
 <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)

在我的春天安全xml我有以下定义.

<session-management invalid-session-url="/home">
 <concurrency-control max-sessions="1" error-if-maximum-exceeded="true" session-registry-ref="sessionRegistry"/>
</session-management>
<beans:bean id="sessionRegistry" class="org.springframework.security.core.session.SessionRegistryImpl"/>
Run Code Online (Sandbox Code Playgroud)

然后我有一个类似休息的控制器来执行注销.

@Controller
@RequestMapping("/api/admin")
public class RestAdminController {
 static final Set<SimpleGrantedAuthority> AUTHS = new HashSet<>();
 static {
  AUTHS.add(new SimpleGrantedAuthority("ROLE_USER"));
 }

 @Autowired
 private SessionRegistry sessionRegistry;

 @RequestMapping("/user/logout");
 public @ResponseBody String logout(@RequestBody Account account) {
  User user = new User(account.getUsername(), "", AUTHS);
  List<SessionInformation> infos = sessionRegistry.getAllSessions(u, false);

  for(SessionInformation info : infos) {
   info.expireNow(); //expire the session
   sessionRegistry.removeSessionInformation(info.getSessionId()); //remove session
  }

  return "ok";
 }
}
Run Code Online (Sandbox Code Playgroud)

当我从同一台计算机上测试时,这段代码"kinda"有效.假设我们有一个用户USER_A和一个管理员ADMIN_A.

  • USER_A使用chrome登录APP. …

java spring spring-mvc spring-security

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

关于Angular 2应用程序加载时该怎么做的一些问题

我正在使用它angular-cli来创建一个Angular 2应用程序.创建应用程序后ng new NEW_PROJECTNAME,我们得到一个index.html页面.在这个页面中他们有这样的东西.

...
<body>
 <app-root>Loading...</app-root>
 ...
</body>
Run Code Online (Sandbox Code Playgroud)

不用说,这个加载消息可能看起来完全不专业.所以我的问题是如何添加更合适的东西,如进度条或微调器?

我意识到需要发生的事情发生在Angular框架之外(对吧?).我找到了一些非常好用的Angular 2软件包(例如Angular 2材料ng2-slim-loading-bar),但这些软件包假设我已经进入了Angular框架; 意思是我在一些Angular组件里面.

所以我的问题如下.

  • 是否有一个Angular 2钩子,我可以用它来显示内容放入之前的加载指示器<app-root></app-root>
  • 如果我必须在Angular框架之外工作,那么最好的方法是什么?天真的,我想我必须安装一些包bower或者npm,引用它index.html,并使用jQuery或显示加载指示器的东西.我假设当Angular完成加载时,它将替换内部的任何东西<app-root></app-root>.我的一个担心这种做法是建筑/包装脚本(然后我必须弄清楚如何将这个亭子/ NPM包我构建的应用程序).

任何帮助表示赞赏.

jquery angular-cli angular-material2 angular

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

如何在Angular 2中为开发(而不是测试)提供模拟服务?

我需要一种方法来在Angular 2的开发期间(而不是在测试期间)模拟我的服务.原因是REST-ful服务器不可靠(更改API而不通知,不稳定,难以擦除并再次站起来) .如果我可以模拟我的服务(基本上都是HTTP REST客户端),那将是很好的.

在Angular 2中创建模拟后端服务的最佳方法是什么?我在测试方面有很多关于模拟后端服务的互联网结果,但这个上下文不是我的用例(我不是在嘲笑测试而是开发).

我已经使用了角度cli来创建和支撑我的项目,我不确定该工具是否可以提供帮助.

我正在寻找像Spring这样的方法,我们可以用"profiles"注释组件/类,然后方便地指定哪个配置文件是活动的,以便注入正确的依赖项.

angular

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

将jar工件部署到Nexus会导致内容类型不匹配

我正在使用Nexus Repository Manager v3.1.0-04.当我尝试将mvn deployjar工件存储到我的存储库时,我遇到了以下问题.

[错误]无法执行目标org.sonatype.plugins:nexus-staging-maven-plugin:1.5.1:部署(inject-nexus-deploy)项目rest-service:无法部署工件:无法传输工件com. xyz:rest-service:jar:0.0.1-20180504.193415-6 from/to nexus(http://nexus.mydomain.io/repository/snapshots/):无法传输文件: http://nexus.mydomain.io /repository/snapshots/com/xyz/rest-service/0.0.1-SNAPSHOT/rest-service-0.0.1-20180504.193415-6.jar.返回码为:400,ReasonPhrase:检测到的内容类型[application/x-sh],但是预期[application/java-archive]:com/xyz/rest-service/0.0.1-SNAPSHOT/rest-service-0.0.1 -20180504.193415-6.jar. - > [帮助1]

我想也许这与nexus-staging-maven-plugin(链接)的版本有关,但即使我将版本设置为1.6.8(最新),我也会得到相同的效果.这篇帖子建议使用build-helper-maven-plugin,所以我修改了我pom.xml的如下.

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
        <execution>
        <id>attach-artifacts</id>
        <phase>package</phase>
        <goals>
            <goal>attach-artifact</goal>
        </goals>
        <configuration>
            <artifacts>
            <artifact>
                <file>target/${artifactId}-${version}.jar</file>
                <type>jar</type>
            </artifact>
            </artifacts>
        </configuration>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

但是,我现在看到了一个不同的问题.

[错误]无法在项目rest-service上执行目标org.codehaus.mojo:build-helper-maven-plugin:3.0.0:attach-artifact(attach-artifacts):目标org.codehaus.mojo的执行附件工件:build-helper-maven-plugin:3.0.0:attach-artifact failed:对于artifact {com.xyz:rest-service:0.0.1-SNAPSHOT:jar}:附加的工件必须具有与其对应的main不同的ID神器. - > [帮助1]

请注意,Maven项目由Spring Initializer通过IntelliJ生成,是一个Spring Boot项目.在不使用Builder Helper插件的情况下,我可以看到所有文件都成功上传到Nexus,直到jar上传完成(它实际上已完成上传,但由于内容类型不匹配,因此失败).

有关如何解决此问题的任何想法?我提到的帖子说"一些maven存储库检查文件内容",那么,在检查文件内容时如何禁用Nexus(我已经控制)?但真正的问题是,为什么内容类型application/x-sh而不是application/java-archive

java spring nexus maven spring-boot

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

如何实施 PyTorch 数据集以与 AWS SageMaker 一起使用?

我已经实现了一个Dataset可以在本地(在我自己的桌面上)运行的 PyTorch,但是在 AWS SageMaker 上执行时,它会中断。我的Dataset实现如下。

class ImageDataset(Dataset):
    def __init__(self, path='./images', transform=None):
        self.path = path
        self.files = [join(path, f) for f in listdir(path) if isfile(join(path, f)) and f.endswith('.jpg')]
        self.transform = transform
        if transform is None:
            self.transform = transforms.Compose([
                transforms.Resize((128, 128)),
                transforms.ToTensor(),
                transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
            ])

    def __len__(self):
        return len(files)

    def __getitem__(self, idx):
        img_name = self.files[idx]

        # we may infer the label from the filename
        dash_idx = img_name.rfind('-')
        dot_idx = img_name.rfind('.')
        label = int(img_name[dash_idx + …
Run Code Online (Sandbox Code Playgroud)

python amazon-s3 pytorch amazon-sagemaker

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

如何判断 R 是否仍在估计我的 SVM 模型或已崩溃?

我正在使用图书馆e1071。特别是,我正在使用该svm功能。我的数据集有 270 个字段和 800,000 行。我已经运行这个程序 24 多个小时了,我不知道它是否挂起或仍在正常运行。我发出的命令是:

svmmodel <- svm(V260 ~ ., data=traindata);
Run Code Online (Sandbox Code Playgroud)

我正在使用 Windows,并使用任务管理器,状态Rgui.exe为“无响应”。R 已经崩溃了吗?是否还有其他提示/技巧可以更好地衡量 R 或 SVM 学习过程中发生的情况?

如果有帮助,以下是我使用资源监视器(在 Windows 中)注意到的一些其他内容:

  • CPU 使用率为 13%(稳定)
  • 线程数为 3(稳定)
  • 内存使用量为 10,505.9 MB +/- 1 MB(波动)

在我写这个帖子的时候,我也看到了“类似的问题”并点击了它们。似乎 SVM 训练是二次或三次。但是,在 24 小时以上之后,如果等待是合理的,我会等待,但如果不是,我将不得不消除 SVM 作为可行的预测模型。

r svm

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

如何在每个 vagrant up 命令后保持 RSA 密钥的指纹不变?

我正在使用 Vagrant + VirtualBox + CentOS 6.5 (box) 创建 VM。每次我vagrant up向 VM发出命令和 SSH 时,我都会收到以下消息。

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@
    @警告:远程主机标识已更改!@
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@
    有人可能正在做一些令人讨厌的事情!
    现在有人可能正在窃听你(中间人攻击)!
    主机密钥也可能刚刚被更改。
    远程主机发送的 RSA 密钥的指纹是
    SHA256:VGRuX5IMJOd+PW6T4jo/ONm6D8vClUmVEaSI7j/nWb8。
    请联系您的系统管理员。
    在 /home/root/.ssh/known_hosts 中添加正确的主机密钥以消除此消息。
    /home/root/.ssh/known_hosts:6 中的违规 RSA 密钥
    weetube 的 RSA 主机密钥已更改,您已要求进行严格检查。
    主机密钥验证失败。

请注意以下事项。

  • VM 设置为静态 IP(例如 10.211.55.10)
  • 主机 (Windows) 已修改其主机文件(例如 10.211.55.10 myvm)
  • 我使用 cygwin 进行 SSH(例如 ssh root@myvm)

我还尝试通过将 /etc/ssh 复制到 /vagrant/ssh 进行引导,然后在 VM 配置中,将 /vagrant/ssh/* 复制回 /etc/ssh,但这似乎没有帮助。

绕过此消息的唯一方法是(使用 Cygwin)并myvm从 ~/.ssh/known_hosts 中删除该条目。我不想每次必须重新创建 VM 时都这样做(例如vagrant up)。

关于如何避免这个问题的任何想法?

linux ssh virtualbox centos vagrant

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