小编Jor*_*dan的帖子

如何仅在需要时运行 Google Cloud SQL?

Google Cloud SQL 宣称,最小机器类型的每小时费用仅为 0.0150 美元,而且我要按每小时收费,而不仅仅是我连接的小时数。这是因为我正在使用游泳池吗?我如何设置我的后端,以便它仅在需要时查询云数据库,这样我就不会为一天中的每个小时收费?

const mysql      = require('mysql');
const pool = mysql.createPool({
    host : process.env.SQL_IP,
    user     : 'root',
    password : process.env.SQL_PASS,
    database : 'mydb',
    ssl      : {
          [redacted]
    }
});

function query(queryStatement, cB){
  pool.getConnection(function(err, connection) {
    // Use the connection
    connection.query(queryStatement, function (error, results, fields) {
      // And done with the connection.
      connection.destroy();
      // Callback
      cB(error,results,fields);

    });
  });
}
Run Code Online (Sandbox Code Playgroud)

javascript mysql node.js google-cloud-sql google-cloud-platform

9
推荐指数
2
解决办法
3525
查看次数

如何对非导出功能进行单元测试?

在Javascript es6模块中,可能有许多小的但易于测试的功能应进行测试,但不应导出。 如何在不导出功能的情况下测试模块中的功能?(不使用rewire

javascript ecmascript-6 jestjs es6-modules

7
推荐指数
5
解决办法
1659
查看次数

如何在没有负载均衡器的情况下访问 ECS 服务?

我有一个在 AWS ECS 上运行的 Docker 容器。我不需要负载均衡器,因为容器旨在处理 websocket 连接。

https://aws.amazon.com/getting-started/tutorials/deploy-docker-containers/显示使用负载均衡器 DNS 名称到达容器。但由于我没有添加负载均衡器,所以我看不到到达容器的方法。

如何在没有负载均衡器的情况下与 ECS 上运行的 Docker 容器建立 Websocket 连接?

amazon-ecs amazon-elb aws-cloudmap

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

为什么 std::iter::Map<I, F> 不能作为 Iterator<Item = I> 返回?

我想将此行的映射部分变成一个函数:

let i: Vec<u32> = (0..=5).map(|x| x * 2).collect();
Run Code Online (Sandbox Code Playgroud)

我编写了这段代码,我认为它是我从原始代码中删除的内容的直接插入:

let j: Vec<u32> = process(0..=5).collect();
Run Code Online (Sandbox Code Playgroud)
fn process<I>(src: I) -> I
where
    I: Iterator<Item = u32>,
{
    src.map(|x| x * 2)
}
Run Code Online (Sandbox Code Playgroud)

我得到这个编译时错误:

error[E0308]: mismatched types
 --> src/lib.rs:5:5
  |
1 | fn process<I>(src: I) -> I
  |            -             - expected `I` because of return type
  |            |
  |            this type parameter
...
5 |     src.map(|x| x * 2)
  |     ^^^^^^^^^^^^^^^^^^ expected type parameter `I`, found struct `std::iter::Map`
  |
  = note: expected …
Run Code Online (Sandbox Code Playgroud)

rust

5
推荐指数
0
解决办法
873
查看次数

在内部进程崩溃时重新启动 Docker 容器

更新:发现秘密原因 - nodemon

答案只是将容器设置为在崩溃时重新启动。在开发中,我使用 nodemon 来防止进程在崩溃时退出 - 所以我认为进程崩溃不会导致容器退出。我的错。进程崩溃实际上会导致容器在使用node和不使用时退出nodemon

{
  "scripts": {
    "development:service": "nodemon ./service/server.js",
    "production:service": "node ./service/server.js"
  }
}
Run Code Online (Sandbox Code Playgroud)

原始问题

当容器的进程崩溃时,如何重新启动 docker 容器?

最好的方法是--autorestart ON_FAILURE为容器设置,然后在内部进程崩溃时使容器崩溃?如果是这样,当其中一个进程崩溃时,如何强制容器崩溃?

我正在使用图像node:10.15.3

有用的链接:如果容器本身崩溃,如何使容器重新启动

文件

FROM node:10.15.3 

ENV NODE_ENV development

# Create application directory.
RUN mkdir -p /src
WORKDIR /src

# Install app dependencies and build.
ADD . /src
RUN yarn install --force

RUN ["chmod", "+x", "./run.sh"]
CMD [ "./run.sh" ]
Run Code Online (Sandbox Code Playgroud)

流程(简化)

USER       PID %CPU %MEM …
Run Code Online (Sandbox Code Playgroud)

unix crash exit docker

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

如何有条件地渲染使用钩子的 React 组件

以下(尽管是人为的)组件违反了react-hooks/rules-of-hooks(通过eslint)

function Apple(props){
  const {seeds} = props;
  if(!seeds){
    return null;
  }
  const [bitesTaken, setBitesTaken] = useState(0);
  return <div>{bitesTaken}</div>
}

Run Code Online (Sandbox Code Playgroud)

出现以下错误 React Hook "useState" is called conditionally. React Hooks must be called in the exact same order in every component render. Did you accidentally call a React Hook after an early return?

我理解钩子需要以相同的顺序调用,但是这种条件渲染(只要返回之前没有调用钩子)并不会阻止以相同的顺序调用钩子。我认为eslint规则是太严格了,但也许有更好的方法。

有条件地渲染使用钩子的组件的最佳方法是什么?

reactjs react-hooks

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

使用重命名和键入信息解构赋值

如何在保持输入信息的同时将变量解构为新名称?

renderItem({item:'apple'})

// jsx:
function renderItem({item: region}) {
    // region == 'apple'
    return <div>{region}</div>;
}
Run Code Online (Sandbox Code Playgroud)

以上将使用 item 解构一个对象并将其分配给region.

如何表达此函数签名的键入信息?

javascript destructuring typescript

3
推荐指数
2
解决办法
1807
查看次数

卸载组件上的状态更新如何导致内存泄漏?

更新未挂载组件的状态如何导致内存泄漏?

已知如何修复以下错误(一种解决方案另一种解决方案

警告:无法对卸载的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。要修复,请取消 useEffect 清理函数中的所有订阅和异步任务。

但是,当组件刚刚被解除并且不再需要时,用“isUnmounted”检查乱扔我的承诺链似乎很奇怪。这如何导致内存泄漏?

javascript memory-leaks reactjs

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

如何在没有克隆的情况下更改对拥有的值的引用?

我正在练习我在阅读 The Book 时学到的 Rust 概念。我已经能够List通过复制Box并将 分配list给复制的框来迭代我的枚举,但直觉上,我觉得必须有一种方法可以“使其指向行中的下一个指针”。

如果我尝试在没有 的情况下执行此操作bx.clone(),例如:self.list = **bx,我会“无法从**bx可变引用后面移出”。这意味着我需要拥有它,但我无法拥有bx它,因为当我在if let.

是否可以或建议在不复制的情况下移动引用?

#[derive(Clone)]
enum List {
    Cons(u32, Box<List>),
    Nil,
}
struct ListHolder {
    list: List,
}

impl Iterator for ListHolder {
    type Item = u32;
    fn next(&mut self) -> Option<u32> {
        if let Cons(num, bx) = &mut self.list {
            let val = *num;
            self.list = *bx.clone(); // This is the key line
            Some(val) …
Run Code Online (Sandbox Code Playgroud)

rust

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

React 中分离的 DOM 节点内存泄漏

编辑 这似乎是由于 React 中的一个问题造成的,并将在未来的版本中修复。 https://github.com/facebook/react/issues/18066


给定一个 React 中的表,该表显示来自 API 的数据,可以用全新的信息刷新,我观察到分离的 DOM 节点泄漏(观察绿色数字):

内存泄漏gif

这是 gif 中执行的代码(下面包含代码以供后代使用)。要查看泄漏,请转到完整页面,打开 chrome 开发工具,查看“性能监视器”选项卡,然后快速单击“Regen”按钮,如 gif 所示。

在这个codesandbox中,节点不是在循环中生成的,因此不会发生泄漏。

唯一的区别是{rows}jsx 中的数组。令人困惑的部分是它{rows}不是一个全局变量,所以我不知道它如何防止旧节点被 GC'd。

为什么使用局部变量会rows导致分离的 DOM 节点泄漏?

注意:DOM 节点似乎稳定在 21,000 个,但无论如何都不应该有那么多节点,因为您可以看到在第一个表生成后它从 7,000 个开始。在我的现实应用程序中,这些分离的节点甚至通过导航(使用反应路由器)仍然存在,这让我相信这是一个真正的泄漏,而不仅仅是等待 GC 的节点。


模拟泄漏的完整代码:

import React, { useState } from "react";

export default function App() {
  const [count, setCount] = useState(0);
  return (
    <div className="App">
      <button onClick={() => setCount(prev => prev + 1)}>Regen</button>
      <FTable count={count} />
    </div> …
Run Code Online (Sandbox Code Playgroud)

javascript memory-leaks reactjs react-hooks

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

为什么 by_ref 不阻止 .all 使用迭代器?

以下打印9,然后true,如预期的那样:

fn main() {
    let mut a = (1..10);
    println!("{}", a.by_ref().count()); // 9
    println!("{}", a.all(|x| x < 10)); // true
}
Run Code Online (Sandbox Code Playgroud)

操场

下面的打印true然后0

fn main() {
    let mut a = (1..10);
    println!("{}", a.by_ref().all(|x| x < 10)); // true
    println!("{}", a.count()); // 0
}
Run Code Online (Sandbox Code Playgroud)

操场

调用.by_ref()之前不应该调用迭代器以.all防止.all使用迭代器吗?

rust

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

如何仅映射迭代器中的 Some() 值?

以下两项都可以工作(两次调用),但感觉太冗长了。


fn main() {
    let v = vec![Some(0), Some(1), None, Some(2)];
    assert_eq!(
        vec![0,2,4],
        v.iter()
            .filter(|x| x.is_some())
            .map(|x| x.unwrap() * 2)
            .collect::<Vec<u8>>());
    assert_eq!(
        vec![0,2,4],
        v.iter()
            .filter_map(|x| *x)
            .map(|x| x*2)
            .collect::<Vec<u8>>());
}
Run Code Online (Sandbox Code Playgroud)

filter_map接近我想要的:

[filter_map] 自动删除选项层。如果您的映射已经返回一个 Option 并且您想跳过 None,那么使用 filter_map 会好得多。

doc.rust-lang.org

但它不会解开闭包中的值,因为它期望返回一个 Option。

有没有办法既过滤某些值,又通过一次调用映射这些值? 例如:

// Fake, does not work
fn main() {
    let v = vec![Some(0), Some(1), None, Some(2)];
    assert_eq!(
        vec![0,2,4],
        v.iter()
            .map_only_some(|x| x * 2)
            .collect::<Vec<u8>>());
}
Run Code Online (Sandbox Code Playgroud)

rust

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