AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / 问题

All perguntas(coding)

Martin Hope
codeforester
Asked: 2025-04-10 15:01:49 +0800 CST

O texto de ajuda do clique mostra 'dinâmico' quando uma opção tem o padrão definido como um lambda

  • 6

Tenho este código em uma CLI:

@click.option(
    "--username",
    default=lambda: os.environ.get("USER", None),
    show_default=True,
    help="User name for SSH configuration.",
)

Quando invoco a CLI com --helpa opção, recebo isto:

  --username TEXT         User name for SSH configuration.  [default:
                          (dynamic)]

Existe uma maneira de fazer com que o click invoque a função lambda e mostre o nome de usuário real em vez de (dynamic)? Sei que posso chamar essa função antes de invocar o decorador click e passar o valor recuperado como padrão em vez de lambda. Estou tentando fazer melhor do que isso.

python
  • 1 respostas
  • 76 Views
Martin Hope
Ivan Debono
Asked: 2025-04-10 14:54:22 +0800 CST

Como usar conversão de tipos no Entity Framework Core?

  • 5

Eu tenho esta entidade:

public class Customer
{
    public int Id { get; set; }
    public string Email { get; set; }
    public IEnumerable<Order> Orders{ get; set; } = [];
    internal byte[] OrdersArray { get; set; }

    public User()
    { }
}

E o mapeamento:

internal class CustomerMap : EntityMappingConfiguration<Customer>
{
    public override void Map(EntityTypeBuilder<Customer> b)
    {
        b.ToTable("Customers").HasKey(t => t.Id);
        b.Property(t => t.Id).HasColumnName("Id").ValueGeneratedOnAdd();
        b.Property(t => t.Email).HasColumnName("Email").IsRequired();
        b.Property(t => t.OrdersArray).HasColumnName("Orders");
        b.Ignore(t => t.Orders);
    }
}

Como posso usar a conversão EFCore para converter a matriz de bytes para a lista e vice-versa na leitura/gravação automaticamente?

c#
  • 1 respostas
  • 34 Views
Martin Hope
Accedix
Asked: 2025-04-10 14:22:37 +0800 CST

Não foi possível resolver vite@"^4.0.0 || ^5.0.0" de @vitejs/[email protected] - Como instalar o Vite ^6.2.4 a partir do projeto raiz?

  • 5

Preciso de ajuda com esse erro. Não consegui npm install, esse erro continua aparecendo.

PS C:\path\to\project> npm install

code ERESOLVE
ERESOLVE unable to resolve dependency tree

While resolving: undefined@undefined
Found: [email protected]
node_modules/vite
  dev vite@"^6.2.4" from the root project

Could not resolve dependency:
peer vite@"^4.0.0 || ^5.0.0" from @vitejs/[email protected]
node_modules/@vitejs/plugin-vue
  dev @vitejs/plugin-vue@"^4.5.0" from the root project

Fix the upstream dependency conflict, or retry
this command with -- force or -- legacy-peer-deps
to accept an incorrect (and potentially broken) dependency resolution.
  • erro npm install

Preciso instalar outra versão do Node.js/NPM? O que devo fazer para corrigir isso?

node.js
  • 2 respostas
  • 53 Views
Martin Hope
burlok
Asked: 2025-04-10 13:42:24 +0800 CST

Converter PDF para JPG

  • 6

Preciso converter um PDF para JPG em uma aplicação VB.NET / .NET Core. Estou usando a biblioteca PdfiumViewere este código:

Function ConvertPDFToJPG(pdfPath As String, outputPath As String) As String
    Try
        If Not File.Exists(pdfPath) Then
            Return "Error: El archivo PDF no existe."
        End If

        ' Cargar el PDF
        Dim pdf As PdfDocument = PdfDocument.Load(pdfPath)
        
        Dim image as Bitmap
        image = pdf.Render(0,10000,10000, false)
        image.RotateFlip(RotateFlipType.Rotate270FlipNone)

        Dim encoder As ImageCodecInfo = ImageCodecInfo.GetImageDecoders().First(Function(c) c.FormatID = ImageFormat.Jpeg.Guid)
        Dim encoderParams As New EncoderParameters(1)
        encoderParams.Param(0) = New EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L)

        Dim outputFile as String = outputPath & "_page-" & (1).ToString("D4") & ".jpg"
        image.Save(outputFile, encoder, encoderParams)
        Return "OK"
    Catch ex As Exception
        Return "Error: " & ex.Message
    End Try
End Function

Funciona, mas a imagem resultante tem apenas 200 KB mais ou menos, e quando insiro um Crystal Reports, ela fica desfocada. Alguma solução?

vb.net
  • 1 respostas
  • 84 Views
Martin Hope
r-uu
Asked: 2025-04-10 13:41:57 +0800 CST

Como garantir que o MapStruct use o método anotado com @ObjectFactory

  • 5

Quero padronizar meus processos de mapeamento para seguir um esquema específico. Por isso, introduzi algumas interfaces genéricas que ajudam a reduzir o esforço ao escrever novos mapeadores para novos tipos. Aqui está a interface para os tipos:

import lombok.NonNull;

public interface MappableCyclic<IN extends MappableCyclic<IN, OUT>, OUT extends MappableCyclic<OUT, IN>>
{
    void beforeMapping(@NonNull IN in, @NonNull OUT out, @NonNull ReferenceCycleTracking context);
    void  afterMapping(@NonNull IN in, @NonNull OUT out, @NonNull ReferenceCycleTracking context);
}

ReferenceCycleTrackingé uma implementação típica para um contexto mapstruct para evitar recursão infinita ao mapear objetos com dependências cíclicas. Além disso, há uma superinterface genérica para mapeadores:

public interface MappableCyclicMapper<IN extends MappableCyclic<IN, OUT>, OUT extends MappableCyclic<OUT, IN>>
{
    @NonNull OUT map(@NonNull IN in, @NonNull @Context ReferenceCycleTracking context);

    @BeforeMapping default void beforeMapping(
            @NonNull                IN                     in,
            @NonNull @MappingTarget OUT                    out,
            @NonNull @Context       ReferenceCycleTracking context)
    {
        out.beforeMapping(out, in, context);
    }

    @AfterMapping default void afterMapping(
            @NonNull                IN               in,
            @NonNull @MappingTarget OUT              out,
            @NonNull @Context ReferenceCycleTracking context)
    {
        out.afterMapping(out, in, context);
    }

    @NonNull Class<OUT> outType();
    @NonNull OUT        create(IN in);

    /**
     * object factory should be called by mapstruct during generated {@link #map(MappableCyclic, ReferenceCycleTracking)}
     * implementation
     */
    @ObjectFactory default @NonNull OUT lookupOrCreate(@NonNull IN in, @NonNull ReferenceCycleTracking context)
    {
        OUT out = context.get(in, outType());
        if (out == null)
        {
            out = create(in);
            context.put(in, out);
        }
        return out;
    }
}

E finalmente aqui está a interface do mapeador para dois dos meus tipos mapeáveis:

@Mapper interface Map_TaskGroup_EntityDTO_EntityJPA extends MappableCyclicMapper<TaskGroupEntityDTO, TaskGroupEntityJPA>
{
    Map_TaskGroup_EntityDTO_EntityJPA INSTANCE = Mappers.getMapper(Map_TaskGroup_EntityDTO_EntityJPA.class);

    @NonNull TaskGroupEntityJPA map(@NonNull TaskGroupEntityDTO input, @NonNull @Context ReferenceCycleTracking context);

    @Override default @NonNull Class<TaskGroupEntityJPA> outType() { return TaskGroupEntityJPA.class; }

    @Override default @NonNull TaskGroupEntityJPA create(TaskGroupEntityDTO in) { return new TaskGroupEntityJPA(in.name()); }

    @ObjectFactory
    @Override default @NonNull TaskGroupEntityJPA lookupOrCreate(
            @NonNull TaskGroupEntityDTO taskGroupEntityDTO, @NonNull ReferenceCycleTracking context)
    {
        return MappableCyclicMapper.super.lookupOrCreate(taskGroupEntityDTO, context);
    }
}

Eu esperava que o mapstruct usasse o @ObjectFactorymétodo fornecido na superinterface, mas isso não acontece. Então, tentei ajudar o mapstruct com um método de fábrica de objetos adicional na subinterface acima. No entanto, a implementação para essa interface gerada pelo mapstruct ignora meus métodos de fábrica de objetos:

    @Override
    public TaskGroupEntityJPA map(TaskGroupEntityDTO input, ReferenceCycleTracking context) {
        TaskGroupEntityJPA target = context.get( input, TaskGroupEntityJPA.class );
        if ( target != null ) {
            return target;
        }

        if ( input == null ) {
            return null;
        }

        String name = null;

        TaskGroupEntityJPA taskGroupEntityJPA = new TaskGroupEntityJPA( name );

        context.put( input, taskGroupEntityJPA );
        beforeMapping( input, taskGroupEntityJPA, context );

        afterMapping( input, taskGroupEntityJPA, context );

        return taskGroupEntityJPA;
    }

Como posso ter certeza de que meus métodos de fábrica de objetos não serão mais ignorados?

java
  • 2 respostas
  • 38 Views
Martin Hope
arker
Asked: 2025-04-10 13:33:52 +0800 CST

Como posso modificar este C# (dentro do PowerShell) para que ele aguarde o término do processo filho que ele gera?

  • 8

Essa pessoa brilhante Jborean93 criou um script do PowerShell que por sua vez gera um .exe chamado "noGui.exe" aqui

Vou citar o código para que você não precise procurá-lo:

Add-Type -OutputType WindowsApplication -OutputAssembly NoGui.exe -TypeDefinition @'
using System;
using System.Runtime.InteropServices;
using System.Text;

namespace NoGui
{
    class Program
    {
        [StructLayout(LayoutKind.Sequential)]
        public struct PROCESS_INFORMATION
        {
            public IntPtr hProcess;
            public IntPtr hThread;
            public int dwProcessId;
            public int dwThreadId;
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct STARTUPINFOW
        {
            public Int32 cb;
            public IntPtr lpReserved;
            public IntPtr lpDesktop;
            public IntPtr lpTitle;
            public Int32 dwX;
            public Int32 dwY;
            public Int32 dwXSize;
            public Int32 dwYSize;
            public Int32 dwXCountChars;
            public Int32 dwYCountChars;
            public Int32 dwFillAttribute;
            public Int32 dwFlags;
            public Int16 wShowWindow;
            public Int16 cbReserved2;
            public IntPtr lpReserved2;
            public IntPtr hStdInput;
            public IntPtr hStdOutput;
            public IntPtr hStdError;
        }

        [DllImport("Kernel32.dll", SetLastError = true)]
        public static extern bool CloseHandle(
            IntPtr hObject);

        [DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        public static extern bool CreateProcessW(
            [MarshalAs(UnmanagedType.LPWStr)] string lpApplicationName,
            StringBuilder lpCommandLine,
            IntPtr lpProcessAttributes,
            IntPtr lpThreadAttributes,
            bool bInheritHandles,
            int dwCreationFlags,
            IntPtr lpEnvironment,
            [MarshalAs(UnmanagedType.LPWStr)] string lpCurrentDirectory,
            ref STARTUPINFOW lpStartupInfo,
            out PROCESS_INFORMATION lpProcessInformation);

        [DllImport("Kernel32.dll")]
        public static extern IntPtr GetCommandLineW();

        static void Main()
        {
            IntPtr cmdLinePtr = GetCommandLineW();
            string cmdLine = Marshal.PtrToStringUni(cmdLinePtr);
            int cmdLineArgsIdx = cmdLine.IndexOf(" -- ");
            StringBuilder newCmdLine = new StringBuilder(cmdLine.Substring(cmdLineArgsIdx + 4));

            STARTUPINFOW si = new STARTUPINFOW()
            {
                cb = Marshal.SizeOf<STARTUPINFOW>(),
                dwFlags = 0x00000001, // STARTF_USESHOWWINDOW
                wShowWindow = 0, // SW_HIDE
            };
            PROCESS_INFORMATION pi;
            bool res = CreateProcessW(
                null,
                newCmdLine,
                IntPtr.Zero,
                IntPtr.Zero,
                true,
                0x00000410,  // CREATE_NEW_CONSOLE | CREATE_UNICODE_ENVIRONMENT
                IntPtr.Zero,
                null,
                ref si,
                out pi
            );

            if (res)
            {
                CloseHandle(pi.hProcess);
                CloseHandle(pi.hThread);
            }
        }
    }
}
'@

Quando o NoGui.exe é executado, ele permite que (no meu caso, o PowerShell, mas pode ser qualquer processo) seja executado sem nenhuma janela/shell/prompts/qualquer coisa aparecendo na tela (e funciona).

É quase exatamente o que eu preciso. Mas, pelo que posso perceber, ele não espera que o processo que você solicitou seja encerrado antes de ser encerrado.

Preciso disso porque se eu for usar isso no Microsoft Intune para executar um script do PowerShell, não sei se o Intune detectaria o processo filho do PowerShell e esperaria sua conclusão.

Imagine por um momento que o script do PowerShell gerado pelo NoGui.exe pode levar muito tempo para ser concluído, mas o Intune pensa "ah, bem, o noGui.exe foi concluído, então a instalação deve ser feita". Mas não é o caso.

Então como podemos modificá-lo para:

  1. ele espera que o processo filho termine antes de terminar a si mesmo.

  2. Pontos adicionais, eu acho, se conseguirmos obter o código de saída para retornar ao processo pai e gerar a saída lá. O script do PowerShell explodiu por algum motivo? Tudo bem, o Intune recebeu o código de saída do Nogui.exe, então sabemos o que aconteceu.

Estou ciente de que existem wrappers do VBScript que ocultam a execução do PowerShell, mas não quero usá-los, pois o VBScript será desativado em algum momento no futuro.

c#
  • 2 respostas
  • 168 Views
Martin Hope
user30229020
Asked: 2025-04-10 12:56:58 +0800 CST

Reverter para savestate não parece funcionar de jeito nenhum

  • 6

Tenho tentado aprender Python e voltar a programar depois de muitos anos, então tentei um jogo de batalha naval bem básico no terminal. Tive muitos obstáculos que superei, mas fiquei em dúvida sobre minhas funções generate_(n)ship(). Tentei escrever o código de forma que eu iniciasse a função com um savestate que assumisse o estado atual do tabuleiro, para que, mais tarde, se a função decidisse tentar colocar uma nave em outro espaço que já tivesse uma, ela pudesse desistir, redefinir o savestate e tentar novamente até que escolhesse e colocasse (n) espaços em branco.

import random

board = []
pboard = []

row = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
col = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]

def print_board(board, prnt):
    for x in range(10):
        board.append(["O"] * 10)
        if prnt == True:
            print("  ".join(board[x]))

def print_pboard(pboard):
    for x in range(10):
        pboard.append(["O"] * 10)
        print("  ".join(pboard[x]))

print_board(board, False)
print_pboard(pboard)
print("Welcome to Battleship!")

def get_coords():
    coord = str(input("Enter coordinates (e.g., A1): ").upper())
    if len(coord) == 3:
        if coord[2] == "0":
          return row.index(coord[0]), 9
    if len(coord) != 2:
        print("Invalid input. Please enter a letter followed by a number (e.g., A1).")
        return get_coords()
    if coord[0] not in row or not coord[1].isdigit() or int(coord[1]) < 1 or int(coord[1]) > 10:
        print("Invalid coordinates. Please try again.")
        return get_coords()
    return row.index(coord[0]), int(coord[1]) - 1

def generate_5ship(board):
    orientation = random.choice(["horizontal", "vertical"])
    savestate = board.copy()

    if orientation == "horizontal":
        x = [random.randint(4, 9)]
        y = [random.randint(0, 9)]
        for i in range(1, 5):
            x.append(x[0] - i)

    else:
        x = [random.randint(0, 9)]
        y = [random.randint(4, 9)]
        for i in range(1, 5):
            y.append(y[0] - i)

    pos = x, y

    if len(pos[0]) > len(pos[1]):
        for i in range(5):
            inty = sum(pos[1])
            if board[x[i]][inty] == "O":
                board[x[i]][inty] = "5"
            else:
                board = savestate.copy()
                return generate_5ship(board)
    else:    
        for i in range(5):
            intx = sum(pos[0])
            if board[intx][y[i]] == "O":
                board[intx][y[i]] = "5"
            else:
                board = savestate.copy()
                return generate_5ship(board)

def generate_4ship(board):
    orientation = random.choice(["horizontal", "vertical"])
    savestate = board.copy()
    print("board")
    print_board(board, True)
    print("savestate")
    print_board(savestate, True)

    if orientation == "horizontal":
        x = [random.randint(3, 9)]
        y = [random.randint(0, 9)]
        for i in range(1, 4):
            x.append(x[0] - i)

    else:
        x = [random.randint(0, 9)]
        y = [random.randint(4, 9)]
        for i in range(1, 4):
            y.append(y[0] - i)

    pos = x, y

    if len(pos[0]) > len(pos[1]):
        for i in range(4):
            inty = sum(pos[1])
            if board[x[i]][inty] == "O":
                board[x[i]][inty] = "4"
            else:
                print("board before reverting")
                print_board(board, True)
                board = savestate.copy()
                print("board after reverting")
                print_board(board, True)
                return generate_4ship(board)
    else:    
        for i in range(4):
            intx = sum(pos[0])
            if board[intx][y[i]] == "O":
                board[intx][y[i]] = "4"
            else:
                board = savestate.copy()
                return generate_4ship(board)
            
def generate_3ship(board):
    orientation = random.choice(["horizontal", "vertical"])
    savestate = board.copy()

    if orientation == "horizontal":
        x = [random.randint(2, 9)]
        y = [random.randint(0, 9)]
        for i in range(1, 3):
            x.append(x[0] - i)

    else:
        x = [random.randint(0, 9)]
        y = [random.randint(2, 9)]
        for i in range(1, 3):
            y.append(y[0] - i)

    pos = x, y

    if len(pos[0]) > len(pos[1]):
        for i in range(3):
            inty = sum(pos[1])
            if board[x[i]][inty] == "O":
                board[x[i]][inty] = "3"
            else:
                board = savestate.copy()
                return generate_3ship(board)
    else:    
        for i in range(3):
            intx = sum(pos[0])
            if board[intx][y[i]] == "O":
                board[intx][y[i]] = "3"
            else:
                board = savestate.copy()
                return generate_3ship(board)

def generate_2ship(board):
    orientation = random.choice(["horizontal", "vertical"])
    savestate = board.copy()

    if orientation == "horizontal":
        x = [random.randint(1, 9)]
        y = [random.randint(0, 9)]
        for i in range(1, 2):
            x.append(x[0] - i)

    else:
        x = [random.randint(0, 9)]
        y = [random.randint(1, 9)]
        for i in range(1, 2):
            y.append(y[0] - i)

    pos = x, y

    if len(pos[0]) > len(pos[1]):
        for i in range(2):
            inty = sum(pos[1])
            if board[x[i]][inty] == "O":
                board[x[i]][inty] = "2"
            else:
                board = savestate.copy()
                return generate_2ship(board)
    else:    
        for i in range(2):
            intx = sum(pos[0])
            if board[intx][y[i]] == "O":
                board[intx][y[i]] = "2"
            else:
                board = savestate.copy()
                return generate_2ship(board)

def is_hit(x, y):
    if board[x][y] == "X":
        print("Hit!")
        pboard[x][y] = "X"
        board[x][y] = "O"
    elif pboard[x][y] == "X":
        print("Already hit!")
    else:
        print("Miss!")
        pboard[x][y] = "M"

def fill_board():
    generate_5ship(board)
    generate_4ship(board)
    generate_4ship(board)
    generate_3ship(board)
    generate_3ship(board)
    generate_3ship(board)
    generate_2ship(board)
    generate_2ship(board)
    generate_2ship(board)
    generate_2ship(board)

def get_win_condition():
    for i in range(10):
        for j in range(10):
            if board[i][j] == "X":
                return False
    return True

def get_misses():
    misses = 0
    for i in range(10):
        for j in range(10):
            if pboard[i][j] == "M":
                misses += 1
    return misses

def get_hits_left():
    hits = 0
    for i in range(10):
        for j in range(10):
            if board[i][j] == "X":
                hits += 1
    return hits

fill_board()

while True:
    print_board(board, True)
    x, y = get_coords()
    is_hit(x, y)
    print_pboard(pboard)
    print("Hits left: " + str(get_hits_left()))
    if get_win_condition() == True:
        print("You win!")
        print("You missed " + str(get_misses()) + " times!")
        break
print("Game Over!")

Esta é a função que tenho usado para depurar. O que eu esperava que ela fizesse era salvar o estado atual do tabuleiro, escolher uma coordenada "semente", construir o navio (neste caso, 4 de comprimento) verificando a string "O", substituindo-a por "X" para indicar um navio e, em seguida, subtraindo do lado correspondente da tupla com base na sua decisão de ser posicionado vertical ou horizontalmente. Substituí os X pelos seus respectivos comprimentos, novamente para fins de depuração. Quando a função começa a colidir com um navio preexistente no tabuleiro, espero que a instrução else substitua o valor do tabuleiro recém-alterado de volta ao seu estado salvo e tente novamente. Em vez disso, ela posiciona o máximo possível, para quando percebe que não pode, ignora a instrução else completamente e retorna ao início da função.

PS: Se você está se perguntando por que calculei a soma para intx ou inty, por algum motivo não consegui descobrir como recuperar o único item da lista e armazená-lo como um inteiro. Calcular a soma da lista foi a primeira coisa que funcionou.

def generate_4ship(board):
    orientation = random.choice(["horizontal", "vertical"])
    savestate = board.copy()
    print("board")
    print_board(board, True)
    print("savestate")
    print_board(savestate, True)

    if orientation == "horizontal":
        x = [random.randint(3, 9)]
        y = [random.randint(0, 9)]
        for i in range(1, 4):
            x.append(x[0] - i)

    else:
        x = [random.randint(0, 9)]
        y = [random.randint(4, 9)]
        for i in range(1, 4):
            y.append(y[0] - i)

    pos = x, y

    if len(pos[0]) > len(pos[1]):
        for i in range(4):
            inty = sum(pos[1])
            if board[x[i]][inty] == "O":
                board[x[i]][inty] = "4"
            else:
                print("board before reverting")
                print_board(board, True)
                board = savestate.copy()
                print("board after reverting")
                print_board(board, True)
                return generate_4ship(board)
    else:    
        for i in range(4):
            intx = sum(pos[0])
            if board[intx][y[i]] == "O":
                board[intx][y[i]] = "4"
            else:
                board = savestate.copy()
                return generate_4ship(board)
python
  • 2 respostas
  • 44 Views
Martin Hope
Ezio
Asked: 2025-04-10 12:42:20 +0800 CST

CONT.SE usando apenas DATA e critérios de correspondência de nome

  • 4

Recebi a tarefa de contabilizar quantos leads um agente de vendas recebe por dia. Então, criei uma planilha, onde os dados são preenchidos automaticamente a partir de uma plataforma de CRM, e uma aba separada para o rastreador.

Eu uso dois critérios para contagens: a data e o nome do agente. Não tenho problema com o nome do agente. O único problema é a DATA.

O problema é que Countif não conta células porque não consegue corresponder à minha referência de célula (somente data), enquanto nos dados de leads ele contém data e hora.

Além disso, os dados dos leads precisam estar em uma aba separada. Não posso combinar as duas abas, elas devem ficar ocultas e bloqueadas, pois os dados são preenchidos automaticamente por uma plataforma de CRM.

Criei uma planilha semelhante como exemplo. Aqui está o link: https://docs.google.com/spreadsheets/d/1-kEKHCQk1qF_k8oPnu-166fYdHukozfChEQ4bixwwB0/edit?usp=sharing

Qualquer orientação ou ajuda sobre isso é apreciada.

date
  • 3 respostas
  • 74 Views
Martin Hope
Deepak Shaw
Asked: 2025-04-10 12:36:07 +0800 CST

Configuração sFTP da conta de armazenamento do Azure com "Usar chave existente armazenada no Azure Key Vault"

  • 5

Ao configurar o SFTP em uma conta de armazenamento do Azure, selecionei a opção "Usar chave existente armazenada no Azure Key Vault" para autenticar um usuário local. No entanto, a lista suspensa para selecionar a chave permanece vazia, apesar de haver uma chave pública SSH armazenada no Key Vault.

Eu verifiquei que:

  • A chave pública SSH é armazenada como um segredo no Key Vault correto.

  • A chave está em formato OpenSSH válido (por exemplo, ssh-rsa ...).

  • Não tenho certeza se devo verificar as permissões RBAC necessárias no Key Vault (função de usuário de segredos do Key Vault).

Você poderia nos informar sobre quaisquer configurações ou requisitos adicionais necessários para preencher o menu suspenso de seleção de teclas?

Consulte a captura de tela em anexo para maior clareza: Usuário local usando chave existente armazenada no Azure KeyVault

Obrigado!

  • 1 respostas
  • 41 Views
Martin Hope
PhDoanh
Asked: 2025-04-10 11:14:50 +0800 CST

O contêiner PostgreSQL está funcionando bem e sem erros, mas o aplicativo ainda gera um erro “banco de dados não existe”

  • 6

Atualmente, estou desenvolvendo um aplicativo de Sistema de Gerenciamento de Bibliotecas (LMS) baseado em Java . A pilha de tecnologia inclui Spring Boot para o backend, JavaFX para o frontend, JUnit para testes e PostgreSQL como banco de dados. O banco de dados é conteinerizado usando Docker com a seguinte docker-compose.ymlconfiguração:

version: '3'
services:
  postgres:
    image: postgres:14.2
    container_name: postgres
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=password
    volumes:
      - ./src/main/resources/initial_data_generation.sql:/docker-entrypoint-initdb.d/init.sql

Nele, o caminho para o arquivo de inicialização do meu banco de dados já concedeu a propriedade do banco de dados ao postgresusuário usando um comando (veja o arquivo para mais detalhes):

...

CREATE DATABASE "library-system-db" WITH TEMPLATE = template0 ENCODING = 'UTF8' LOCALE = 'en_US.utf8';

ALTER DATABASE "library-system-db" OWNER TO postgres;

\connect -reuse-previous=on "dbname='library-system-db'"

...

Além disso, o application.propertiesarquivo é configurado para se conectar ao banco de dados depois que o contêiner estiver ativo:

## Database connection
spring.datasource.url=jdbc:postgresql://${DATABASE_HOST:localhost}:${DATABASE_PORT:5432}/${DATABASE_NAME:library-system-db}
spring.datasource.username=${DATABASE_USERNAME:postgres}
spring.datasource.password=${DATABASE_PASSWORD:password}

# JPA Properties
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect

Após a execução docker compose up -d, verifiquei os logs e confirmei que o contêiner estava funcionando corretamente. Também acessei o terminal do contêiner para verificar diretamente e vi que o banco de dados foi criado.

No entanto, quando executo o aplicativo por meio do main()método, a compilação falha e gera o erro: FATAL: database "library-system-db" does not exist Você pode encontrar mais detalhes no arquivo de log em anexo . O log também sugere que alguns outros erros podem estar relacionados a esse problema raiz.

Eu realmente apreciaria quaisquer sugestões ou soluções que você possa ter para resolver esse problema 🙏

PS: O projeto que estou desenvolvendo é baseado no código-fonte do Github criado por Kwame Mintah . Avise-me se precisar de mais informações!

java
  • 2 respostas
  • 86 Views
Prev
Próximo

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve