我有一个现有的网站,我想使用Visual Studio Team Services在Azure上部署.该网站由静态文件组成,没有ASP.NET或其他任何涉及的内容.
在Visual Studio Team Services中,我创建了一个执行npm install和gulp构建的构建.这将生成一个dist包含该网站所有文件的文件夹.在Azure中,一切都设置正确(订阅,Web应用程序,...).
但是,我不确定如何将我的代码推送到Azure.探索VSTS的Release选项卡中的选项,似乎总是需要'工件',但我只有一堆文件.我需要在文件dist夹中发布文件并确保index.html提供服务.
我怎样才能做到这一点?
这个问题是有关这一之一,然而,答案全部状态,从Azure的开始,并没有提及如何使用Visual Studio团队服务部署现有的代码.
azure azure-web-sites azure-devops azure-pipelines azure-pipelines-release-pipeline
我有一个需要缓存的作业列表(按 id)。然而,在某些情况下,拥有最新版本的作业很重要,并且需要绕过缓存(强制更新)。发生这种情况时,新获取的作业应放置在缓存中。
我是这样实现的:
@Cacheable(cacheNames = "jobs", key = "#id", condition = "!#forceRefresh", sync = true)
public Job getJob(String id, boolean forceRefresh) {
// expensive fetch
}
Run Code Online (Sandbox Code Playgroud)
期望的行为:
getJob("123", false) => 返回作业 v1(如果存在,则从缓存中获取)getJob("123", true) => 返回作业 v2(更新版本,从数据库中获取)getJob("123", false)=> 返回作业 v2(更新版本,从缓存中获取)实际上,最后一次调用getJob("123", false)返回 job v1,即陈旧版本。似乎第二次调用(强制更新)不会更新缓存中的值。
我怎样才能在这里实现正确的行为?
缓存配置(使用咖啡因):
CaffeineCache jobs = new CaffeineCache("jobs", Caffeine.newBuilder()
.expireAfterWrite(1, TimeUnit.MINUTES)
.maximumSize(100)
.build());
Run Code Online (Sandbox Code Playgroud) 我使用以下策略设置内容安全策略(仅报告):
report-uri https://my-company.report-uri.com/r/d/csp/reportOnly?ngsw-bypass=true; default-src 'self'; script-src 'self' https://www.googletagmanager.com; font-src 'self' https://fonts.gstatic.com; connect-src 'self' https://www.google-analytics.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: https://s.gravatar.com;
Run Code Online (Sandbox Code Playgroud)
在 Chrome 开发控制台中,记录以下错误:
[仅限报告] 拒绝连接到“https://s.gravatar.com/avatar/0346e37b7fed8cb32404a71dca932fdf?s=480&r=pg&d=https%3A%2F%2Fcdn.auth0.com%2Favatars%2Ffa.png”,因为它违反了规定以下内容安全策略指令:“connect-src 'self' https://www.google-analytics.com”。
正如您所看到的,请求的资源是一个图像,其 url 在img-srcCSP 策略的指令中被列入白名单。然而,Chrome 报告称该错误违反了该connect-src指令。我不明白为什么当资源显然是图像时,会评估 connect-src 指令而不是 img-src 。
字体 ( https://fonts.gstatic.com ) 和 googletagmanager 脚本 ( https://www.googletagmanager.com/gtag/jsconnect-src ) 也会发生同样的情况,两者都会导致, 而不是font-src或 的问题script-src。
在 Firefox 和 Safari 中,不会记录任何错误。
更神秘的是,Chrome不会报告错误,它只将其记录到控制台(report-uri.com 上没有错误的痕迹)。其他(真实的)CSP 错误显示在 report-uri.com 上,因此报告设置没有任何问题。
我正在努力实现这个目标:
具有值的元素应具有灰色"功能区".具有值的元素具有类selected,没有任何值的元素不具有.
我的HTML看起来像这样:
<div class="row">
<span>.</span>
<span>.</span>
<span class="selected">2</span> <!-- Should be gray & rounded (left) -->
<span class="selected">3</span> <!-- Should be gray -->
<span class="selected">2</span> <!-- Should be gray & rounded (right) -->
<span>.</span>
<span>.</span>
<span class="selected">5</span> <!-- Should be gray & rounded (left) -->
<span class="selected">5</span> <!-- Should be gray & rounded (right) -->
<span>.</span>
</div>
<div class="row">
...
</div>
Run Code Online (Sandbox Code Playgroud)
要完成灰色功能区,我想我需要这些CSS规则:
selected都应具有灰色背景.简单.据我所知,没有像CSS这样的CSS选择器:first-of-class.然而,这还不够,因为同一条线上可能存在多个"缎带".我需要类似的东西:first-adjacent-sibling-of-class.
有没有办法用纯CSS实现这一点,还是需要JavaScript?
我有一个角度材料网格列表.它由一行(跨越4列)和许多"项"行组成,每行包含4个图块.这个 codepen说明了这个问题.
每个项目都应该有自己的行,即对于每个项目,应该渲染4个图块.
要做到这一点,我不能把它ng-repeat放在一个瓷砖上,因为这只会重复一个瓷砖.我尝试将4个ng-repeat磁贴包装在包含它的div中,但这会搞砸布局(在Codepen中:取消注释div).
这是我的代码:
<md-grid-list md-cols="4" md-row-height="4:1" md-gutter="8px">
<md-grid-tile class="gray" md-colspan="4">
<div layout="column" layout-fill>this is a static row</div>
</md-grid-tile>
<div ng-repeat="item in appCtrl.items">
<md-grid-tile class="gray">
<div layout="column" layout-fill>this row</div>
</md-grid-tile>
<md-grid-tile class="gray">
<div layout="column" layout-fill>should repeat</div>
</md-grid-tile>
<md-grid-tile class="gray">
<div layout="column" layout-fill>for every</div>
</md-grid-tile>
<md-grid-tile class="gray">
<div layout="column" layout-fill>item</div>
</md-grid-tile>
</div>
</md-grid-list>
Run Code Online (Sandbox Code Playgroud)
关于如何使用重复的瓷砖正确渲染网格列表的任何想法?
angularjs ×1
azure ×1
azure-devops ×1
azure-pipelines-release-pipeline ×1
caching ×1
caffeine ×1
css ×1
css3 ×1
html ×1
javascript ×1
spring ×1
spring-boot ×1
spring-cache ×1