我在 blazor 应用程序的其中一个页面中实现了一个文件放置区域,该区域是使用 javascript 运行时接口进行处理的。为了避免内存泄漏,我有一个 javascript 方法,它会删除所有事件侦听器。这是从 dispose 函数中调用的,如下所示:
public ValueTask DisposeAsync()
{
ViewModel.PropertyChanged -= OnPropertyChangedHandler;
GC.SuppressFinalize(this);
return JSRuntime.InvokeVoidAsync("deInitializeDropZone");
}
Run Code Online (Sandbox Code Playgroud)
这是可行的,但是如果我在浏览器中重新加载页面(F5 或重新加载按钮),则会出现以下异常:
fail: Microsoft.AspNetCore.Server.Kestrel[13]
Connection id "0HMI59N5RRGP7", Request id "0HMI59N5RRGP7:0000000E": An unhandled exception was thrown by the application.
System.InvalidOperationException: JavaScript interop calls cannot be issued at this time. This is because the component is being statically rendered. When prerendering is enabled, JavaScript interop calls can only be performed during the OnAfterRenderAsync lifecycle method.
at Microsoft.AspNetCore.Components.Server.Circuits.RemoteJSRuntime.BeginInvokeJS(Int64 asyncHandle, String identifier, String argsJson, …Run Code Online (Sandbox Code Playgroud) 我的气流调度程序中有两个 DAG,它们过去一直在工作。在需要重建运行气流的 docker 容器后,它们现在陷入了困境queued。在我的例子中,DAG 是通过 REST API 触发的,因此不涉及实际的调度。
由于有很多类似的帖子,我从一个类似的问题中浏览了这个答案的清单:
是的!
是的!
是的,两个 DAGS 都显示在 WebUI 中,并且没有显示任何错误。
是的,两个 DAG 的构造函数如下所示:
dag = DAG(
dag_id='image_object_detection_dag',
default_args=args,
schedule_interval=None,
start_date=days_ago(2),
tags=['helloworld'],
)
Run Code Online (Sandbox Code Playgroud)
不,我通过 REST API 手动触发我的 DAG。
查找任务无法退出状态queued并运行的原因的最佳方法是什么?
编辑:
出于好奇,我尝试从 WebUI 内触发 DAG,现在两个运行都已执行(从 WebUI 触发的一个失败,但这是预期的,因为没有设置配置)

我正在尝试将 MinIO 的运行实例添加到 Airflow 连接,我认为它应该像 GUI 中的设置一样简单(不用介意暴露的凭据,这是一个环境阻塞,之后将被更改):

Airflow 和 minio 都在 Docker 容器中运行,它们都使用相同的 Docker 网络。按下测试按钮会导致以下错误:
测试连接时发生“ClientError”错误:调用 GetCallerIdentity 操作时发生错误 (InvalidClientTokenId):请求中包含的安全令牌无效。
我很好奇我错过了什么。我们的想法是建立此连接,然后使用存储桶进行数据感知调度(= 我想在有人将文件上传到存储桶时立即触发 DAG)
在我的小型 blazor 项目中,我想在视图中显示图像,如下所示:
<img scr="img/background.jpg" class="img" alt="background">
Run Code Online (Sandbox Code Playgroud)
但我在浏览器中看到的只是“alt”文本(对不起,深色图像,这是一个深色主题的网站):
该图像位于wwwroot/img/background.jpg。奇怪的是,在同一位置是网页的图标,我在以下head部分中调用它_Host.cshtml
<link rel="icon" type="image/x-icon" href="/image/icon.png">
Run Code Online (Sandbox Code Playgroud)
这表明一切都很好。
在其他类似的帖子(如这篇文章)之后,我已经尝试将源路径更改为以下任一路径:
scr="/img/background.jpg"scr="~/img/background.jpg"scr="img/background.jpg"scr="~img/background.jpg"这些似乎都不起作用。所以有两个问题:1.我的问题可能是什么,2.如何调试这种“错误路径”类型的错误。对于第二部分,我的直觉是使用浏览器中的“查看源”选项并查找图像,但到目前为止,当服务器将图像呈现给浏览器时,我还没有找到图像的位置。我也尝试过使用不同的浏览器,但结果相同。
编辑:直接
导航到图像https://localhost:7001/img/background.jpg也可以。由于某种原因,它只是不想从 html 中显示......
我正在我的 blazor 服务器应用程序上测试图像上传。为此,我的.razor组件如下所示:
@page "/uploadtest"
<h1>Upload Example</h1>
<AuthorizeView>
<Authorized>
<p>A simple example with a model, which can upload images</p>
<label>
Load Images:
<InputFile OnChange="@UploadImages" multiple accept=".jpg,.jpeg,.png" />
</label>
</Authorized>
<NotAuthorized>
<p>To use this application, please <a href="Identity/Account/Login">log in</a> or <a href="Identity/Account/Register">register</a> a new account! </p>
</NotAuthorized>
</AuthorizeView>
Run Code Online (Sandbox Code Playgroud)
我将代码隐藏在一个单独的.razor.cs文件中,该类如下所示:
public partial class UploadExample: ComponentBase
{
#region Protected Properties
[Inject]
protected AuthenticationStateProvider AuthenticationStateProvider { get; private set; }
[Inject]
protected IWebHostEnvironment WebHostEnvironment { get; private set; }
#endregion …Run Code Online (Sandbox Code Playgroud) 我对收到的警告感到有些困惑。这是相关代码:
#nullable enable
public partial class FileTable<TItem> : ComponentBase, IDisposable
{
// bunch of class code
public async Task FilterColumn(Func<TItem, IComparable>? itemProperty, string? searchString)
{
ArgumentNullException.ThrowIfNull(ViewItems);
if (itemProperty == null)
return;
if (searchString == null)
searchString = string.Empty;
await Task.Run(() =>
{
foreach (var item in ViewItems)
{
var property = itemProperty(item.Item);
if (property == null)
continue;
item.IsVisible = property.ToString().ToLower().Contains(searchString.ToLower());
}
});
StateHasChanged();
}
}
Run Code Online (Sandbox Code Playgroud)
我收到警告property.ToString()如您所见,我已经添加了一堆空检查,但似乎没有一个可以消除警告。据我所知,现在是不可能property的。null显然我错过了一些东西......那么什么可能触发这个警告呢?
我正在尝试设置一种在 PyCharm 中调试Streamlit脚本的方法。我在 Win10/64 位机器上,在使用 conda 创建的虚拟环境中工作。以默认方式运行代码并按streamlit run main.py预期工作。我已经阅读了几篇论坛帖子,最重要的是这里的相关问题。
我的问题如下:上述问题的答案建议更改调试配置以使用Module name而不是Script path输入streamlit.cli作为模块。然后在参数中应该将其设置run main.py为参数。
不幸的是,这给我带来了以下错误:
没有名为streamlit.cli的模块
我在哪里找到streamlit.cli它不应该与库的默认 pip 安装一起安装?我需要单独安装吗?
任何帮助深表感谢!
我根据教程在 blazor 服务器端应用程序中创建了一个选项卡控件。该控件工作正常,但是我希望能够知道活动页面何时更改。因此我在代码中添加了一个事件:
internal void ActivatePage(TabPage page)
{
OnTabSelectionChanged();
ActivePage = page;
}
public delegate void TabSelectionChangedEventHandler(object source, EventArgs args);
public event TabSelectionChangedEventHandler TabSelectionChanged;
protected virtual void OnTabSelectionChanged()
{
TabSelectionChanged?.Invoke(this, EventArgs.Empty);
}
Run Code Online (Sandbox Code Playgroud)
现在我想在使用该控件的 blazor 组件中执行以下操作:
<TabControl @TabSelectionChanged="MyFunction">
<TabPage Text="tab #1">
<!-- content -->
</TabPage>
<TabPage Text="tab #2">
<!-- content -->
</TabPage>
<TabPage Text="tab #3">
<!-- content -->
</TabPage>
</TabControl>
Run Code Online (Sandbox Code Playgroud)
如何实现这一目标?
我的 Windows 机器上运行着一个 docker 容器,它是使用官方文档中提供的 docker-compose 文件的改编版本构建的。
这工作正常,但是我想将 python 脚本(这是我的任务)从已安装的plugins文件夹移到它们自己的 docker 容器中。
为了测试这一点,我创建了一个简单的“Hello World!” 示例脚本:
import numpy as np
def main():
print(f'Hello World')
print(np.random.random((3, 3)))
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
与以下简单的 docker 文件一起
FROM python:3.9
ADD main.py .
RUN pip install numpy
CMD ["python", "./main.py"]
Run Code Online (Sandbox Code Playgroud)
docker build -t docker-test-image .
我可以使用 CLI创建图像,运行它docker run --name docker-test-container docker-test-image会得到预期的输出:
Hello World
[[0.20923763 0.25415024 0.95603957]
[0.01320074 0.58392589 0.24175036]
[0.06431375 0.87276564 0.9912474 ]]
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,但是如果我用我的 docker-operator 触发 DAG,它就会失败,并且我会得到几个
FileNotFoundError: [Errno 2] …
我有一个简单的程序,它有两个长时间运行的任务要执行:
我想要做的是:这些长时间运行的进程在一个额外的线程中运行,其中包含更新我的 GUI 的不同变量 - 例如当前的进度条正在工作,还有我需要在 GUI 上显示的所有消息。但是,目前,我只能将进度条用于第二个任务(使用数据库) - 文件夹和文件的复制以递归方式完成(为每个需要复制的子文件夹调用自身)我不知道会复制多少文件夹。因此,在复制进行时,我希望进度条显示忙碌指示(像这样),完成后它应该是 dbs 上工作的标准进度条。
这样的解决方案是否可能以一种干净的方式出现?
根据Tim Corey 的ASP.NET 和dapper 教程,我采用了一个通用函数来将数据存储在 SQL Server 数据库中,以返回所存储对象的 ID:
public async Task<T> SaveData<T, U>(
string storedProcedure,
U parameters,
string connectionId = "DefaultDataConnection")
{
using IDbConnection connection = new SqlConnection(_configuration.GetConnectionString(connectionId));
T ID = await connection.ExecuteScalarAsync<T>(storedProcedure, parameters, commandType: CommandType.StoredProcedure);
return ID;
}
Run Code Online (Sandbox Code Playgroud)
问题如下:在教程的原始代码中,可以在不声明泛型参数类型的情况下调用该方法。然而,对于附加的泛型返回类型,这是没有必要的。问题是,这些方法通常是用匿名类型对象调用的,我不知道如何调用该方法:
// this is within the insert method of my class, which is responsible for handling the images table:
int insertedID = await _db.SaveData<int, ????>("dbo.spImage_Insert", new { image.UserID, image.FileName, image.UploadDate });
Run Code Online (Sandbox Code Playgroud)
应该怎样做呢?我是否必须使用显式类型而不是匿名对象?
编辑:返回值是通用的,因为 ID 可以是 …