小编Kar*_*ite的帖子

很好地阻止齿轮工人

我有许多Gearman工作人员不断运行,保存用户页面视图记录等内容.偶尔,我会更新Gearman工作人员使用的PHP代码.为了让工作人员切换到新代码,我杀死并重新启动工作人员的PHP进程.

有什么更好的方法呢?据推测,当我杀死其中一个工作进程时,我有时会丢失数据(尽管不是非常重要的数据).

编辑:我找到了一个适合我的答案,并在下面发布.

php gearman

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

RxJS 5,将一个observable转换为一个BehaviorSubject(?)

我有一个父观察,一旦它有一个订阅者,将进行查找并发出一个值,然后完成.

我想将其转换为执行以下操作的可观察(或行为主题或其他任何工作):一旦它至少有一个订阅者,它就会从父可观察对象(一次)获得结果.然后它向所有订阅者发出该值,并在订阅时向所有未来订阅者发出该值.即使其订户数量降至零,它仍应继续此行为.

看起来这应该很容易.这是不起作用的:

theValue$: Observable<boolean> = parent$
.take(1)
.share()
Run Code Online (Sandbox Code Playgroud)

其他不起作用的东西:publishReplay(),publish().更好的东西:

theValue$ = new BehaviorSubject<boolean>(false);

parent$
.take(1)
.subscribe( value => theValue$.next(value));
Run Code Online (Sandbox Code Playgroud)

但是,这种方法存在一个问题:parent$theValue$获得第一个订阅者之前订阅.

有没有更好的方法来处理这个?

rxjs rxjs5

17
推荐指数
2
解决办法
5792
查看次数

当构造函数的参数不可用时,PHP依赖注入

我们刚刚开始齐心协力在项目中统一使用依赖注入,我遇到了一个问题.

我正在编写一个类来处理MongoDB查询.我传入一个MongoClient作为构造函数的依赖,没有问题.但是,如果在实例化时实例化对象所需的变量不可用,我该如何处理依赖?

特别是,我们有一个MongoCollection方法的包装器,findOne,如果你传入一个字符串,当前(在旧代码中)将该字符串转换为带有"new MongoId($ _ id)"的MongoId,并将其用于查找功能.

根据我对依赖注入的了解,使用"new MongoId"是一个坏主意,而且我已经知道它会使为字符串转换为MongoId的函数编写测试用例变得更加困难.

但是当MongoId类在构造函数上获取id字符串时,如何处理注入?

我唯一能想到的就是在类构造函数上传递一个闭包,它执行以下操作:

$getMongoId = function( $id ){
    return new MongoId( $id );
};
Run Code Online (Sandbox Code Playgroud)

class MyMongo
{
   function __construct( MongoClient $client, Closure $mongoIdGetter){...}
}
Run Code Online (Sandbox Code Playgroud)

[编辑修复此最后一部分]

但这是处理它的正确方法吗?当然,如果我们使用DiC,我们可以做到,但需要一个闭包构造函数似乎有点多.我只是在注入依赖关系时过于教条吗?我想在新课程中使用"new MongoId($ _ id)"可以轻松解决这个问题.

php dependency-injection mongodb

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

平衡浏览器缓存图像和链接的时间到期以避免带宽被盗

我们在Amazon S3上托管我们的图像,并通过Amazon Cloudfront为他们提供服务.我们想减少带宽费用.我们认为我们有很多带宽被盗,并希望开始使用签名网址来防止这种情况发生.但是,我们必须平衡这一事实,即每次我们发送一个新签名的URL时,它会使图像的浏览器缓存无效.

我们当前的计划是生成一个有效期为两个月的签名网址,然后在生成新签名网址之前将其缓存在本地并提供一个月.这将允许浏览器将图像缓存更长时间.然而,这也意味着任何人都可以为图像提供长达两个月的带宽.

有没有办法让链接更快到期,但让浏览器继续缓存该图像?我知道当url被重新签名用于新的时间戳时,图像的etag和If-Modified-Since不会改变,但是浏览器不再知道在头部中发送这些值,因为就其而言,这是一个新的URL.有没有解决这个问题的方法?

amazon-s3 browser-cache amazon-cloudfront

7
推荐指数
1
解决办法
827
查看次数

Normalizr:按类型而不是多态映射的模式识别实体

对于多态模式,例如Normalizr中的Union,对于模式定义和数据:

const data = { owner: { id: 1, type: 'user', name: 'Anne' } };

const user = new schema.Entity('users');
const group = new schema.Entity('groups');
const unionSchema = new schema.Union({
  user: user,
  group: group
}, 'type');

const normalizedData = normalize(data, { owner: unionSchema });
Run Code Online (Sandbox Code Playgroud)

规范化数据采用以下形式:

{
  entities: {
    users: { '1': { id: 1, type: 'user', name: 'Anne' } }
  },
  result: { owner: { id: 1, schema: 'user' } }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,实体键入架构键,users但结果对象仅包含UnionSchema定义中架构的键.这可能使得在没有完全非规范化的情况下稍后匹配元素变得困难.

是否有一些更好的方法来使用normalizr对这些数据进行标准化,以便更容易从实体中提取实体entities,给定 …

javascript normalizr

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

Firefox 中间歇性出现 Webpack ChunkLoadError 的根源是什么?

我在一个网站上工作,该网站有一个 Angular 前端,可以通过 webpack(通过 angular-cli)延迟加载 js 块。

我们的一些 Firefox 用户(仅限 Firefox)间歇性地遇到一个问题,其中一个 js 块无法加载,从而导致 ChunkLoadError。当他们清除 Firefox 缓存并重试时,Firefox 将(正确)加载之前无法加载的 js 块。我从多个受影响的用户处获取了 HAR 文件,并亲眼目睹了该模式。例如,在我分享的屏幕截图中,单个文件显示传输了 -1 字节,状态代码为 0。看起来 Firefox 甚至没有尝试发送请求,但这可能是缓存的产物。 在此输入图像描述

这是来自另一个用户的类似但略有不同的 HAR。该错误表现相同。请注意,在这种情况下,有响应,但仍传输 -1 字节。 在此输入图像描述

我在 StackOverflow(和其他地方)上看到过其他类似的问题,这些问题讨论了由于部署新代码而导致的块消失,但这不是这里的问题——清除缓存之前和之后的文件名是相同的,并且这些部署后不会出现问题。

我怀疑有扩展程序或附加组件(可能是某种 js 或广告拦截器),但一些受影响的用户发誓即使所有扩展程序都被禁用,他们也会看到问题。现在,我最好的猜测是 Firefox 本身的缓存系统存在某种问题,但实际上,这只是一个随机猜测。

我知道这不足以调试此问题,但我希望这可能会给某人敲响警钟,他们可以为我指明正确的方向。当然,我自己复制这个的运气为零。

以下是用户报告问题的两个讨论(在我们的网站上),包括一些技术细节:

https://boardgamegeek.com/thread/2800974/cant-open-forum-threads-firefox https://boardgamegeek.com/thread/2788693/special-videos-page-immediately-redirects-me-empt

一些相关的技术细节:我们使用的是 Angular 13.2.1,Angular-CLI 使用的是 webpack 5.67.0。块本身存储在 S3 上并通过 Amazon CloudFront 提供服务。Firefox 版本因用户而异,但至少在 96 版本的 Firefox 中都会出现此问题。

firefox webpack angular-cli angular

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

Git:主要版本更改的分段合并方法?

我们正在对网站进行重大修订。修改后的站点上的所有工作都是在git分支(称为2.0)中完成的,该分支是从master分支出来的。在此过程中,已经掌握了一些较小和重要的更改,我们希望将这些更改合并到2.0中。

但是,将其作为一个大的合并似乎很麻烦-尽管某些更改可以很好地合并,但其中一些更改涉及的代码不再存在于2.0中,并且本质上将要求重新实现2.0的新功能。只要合并后仍然存在许多未解决的冲突,修复这些功能可能就很困难。我们已经考虑过使用cherry-pick从master那里带来那些可以很好地合并的更改,同时手动重新实现主要更改,但是如果我们想将2.0中的所有更改合并回给我,那将会造成麻烦。主。

理想情况下,我可以进行从master到2.0的分段合并-将一组次要提交合并到一个特定提交,然后合并一个主要提交并手动重新实现特定的新功能,然后手动重新实现另一个系列,最后,母版完全合并到2.0中。这是解决这种情况的好方法吗?如果是这样,我该如何部分合并到master中,而不是一直合并到最新的master提交中?还是我应该采取其他更好的方法?

git merge

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

打字稿未导入的代码的打字稿类型?

这是一个Angular应用程序的问题,但我不认为这是一个角度特定的问题.

我正在开发一个Angular 7应用程序,我正在使用一些库,这些库是通过前端的脚本标签从其他来源(Stripe,recaptcha,googletags等)导入的.我将在这里使用Stripe作为示例,因为Stripe绝对要求Stripe.js客户端从前端库导入PCI兼容性,因此从源服务器端不是一个选项.

我已经Stripe从DefinitelyTyped 安装了类型.如果我在组件中添加declare let Stripe: any;和使用Stripe它,它可以工作,但当然它不是类型安全的.如果省略声明,VSCode会发现类型错误,编辑器会捕获类型错误,但它不会编译,(error TS2304: Cannot find name 'Stripe'.)可能因为我没有importStripe的声明.

有没有办法提示TypeScript它应该使用DefinitelyTyped中的类型来捕获类型错误,而不导入Stripe库本身?

编辑:我收回我所说的关于不认为这是Angular特定的内容.我现在认为这可能与角度编译过程有关.

typescript angular angular7

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

用于检测三星设备是否支持悬停的 CSS 媒体查询问题

我想使用纯 css 为不支持悬停的设备提供不同的行为。这在 iOS 和 Google 设备上很容易实现:

@media (hover: none) {
}
Run Code Online (Sandbox Code Playgroud)

但是,Android 设备似乎并不像我期望的那样支持这一点。这是一个简单的测试用例:https : //codepen.io/kylegordy/pen/abOLbXV

我希望在支持悬停(如桌面)的设备上全部为绿色,在不支持悬停的设备上全部为红色。但是三星手机在两个媒体查询悬停时都失败了。

似乎我们可以通过 testing 来解决这个问题pointer: coarse,但这并不是我们真正想要测试的,所以我不愿意使用它作为一种解决方法。我应该考虑其他一些解决方案吗?

css android samsung-mobile

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

如何同步多个Fedora系统的时钟

我有一个订阅系统,允许用户订阅他们感兴趣的东西或人,并在提交新帖子或文件或图像时收到通知.为了确定某些东西是否是新的,我通过tstamp跟踪他们的观点.问题是如果网络服务器和MySQL数据库不同步,用户可能会错过在他们查看项目的同时发布的内容.或者被展示两次.

我可以通过从数据库中检索tstamp来消除这个问题,但这是为了获得tstamp而与数据库的大量连接.如果我可以定期将网络服务器的系统时钟同步到我们的数据库服务器(至少可能),我至少可以大大减少问题.有没有人对最佳方法有任何建议?

我不愿意使用NOW()将查看时间输入数据库.我使用Gearman Process记录视图,这意味着进入视图总会有一点延迟.但是,通常情况下,这种延迟是最小的,并且它可能小于系统时钟之间的差异,假设我无法进行常规同步.

mysql sync fedora clock

0
推荐指数
1
解决办法
208
查看次数