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
Eric Brown - Cal
Asked: 2025-04-08 04:13:31 +0800 CST

ASP.NET Core 6 Web API - elmah tratando erros 404, mas não atingindo meus filtros de exceção, então não consigo decidir como lidar com eles

  • 5

Tenho uma API Web ASP.NET Core 6. Ela é pública.

Se você acessar a URL raiz no navegador, será exibido um erro http 404.

O ELMAH detecta isso e envia um e-mail, mas tenho uma filtragem de erros e ele não vê a exceção (o que acontece milhares de vezes por dia enquanto a API é escaneada).

Em startup.cs, configurei isso:

public void ConfigureServices( IServiceCollection services )
{
    services.AddMvc(options => options.Filters.Add(typeof(ExceptionFilter)));
    // ...
}

No Configuremétodo, eu chamo isso de:

  if (GetUseErrorEmailVar())
  {
      app.UseExceptionHandler(appException =>
      {
          appException.Run(async context =>
          {
              var exceptionFeature = context.Features.Get<IExceptionHandlerFeature>();

              if ( exceptionFeature?.Error is FileNotFoundException )
              {
                  await context.Response.WriteAsync(" The file was not found.");
              }

              if (exceptionFeature?.Path == "/")
              {
                  await context.Response.WriteAsync(" Page: Home.");
              }

              if (exceptionFeature.Error is ApiErrorException exception)
              {
                  await context.Response.WriteAsync(JsonConvert.SerializeObject(new BaseReturnDataObject
                          {
                              ErrorType = exception.GetType().ToString(),
                              ErrorMsg = exception.Message
                          }
                      )
                  );
              }
              ////else if (exceptionFeature.Error is ApiLoginErrorException exception2)
              ////{
              ////    // Debug instead of error, because SMTP appender makes a duplicate email (actually 3) - EWB
              ////    log.LogDebug("Startup::Configure(...):: Global exception handler ; LOGIN ex:" + exceptionFeature.Error.ToStringNullSafe());
              ////}
              ////else// everything else -EWB
              ////{
              ////    // Debug instead of error, because SMTP appender makes a duplicate email (actually 3) - EWB
              ////    log.LogDebug("Startup::Configure(...):: Global exception handler ; ERROR ex:"+ exceptionFeature.Error.ToStringNullSafe());
              ////    
              ////    exceptionFeature.Error.Data["handled"] = true;
              ////}
          });
      });
  }
  app.UseElmah();// must be after all other handlers and middleware for errors. -EWB

Mas nem o manipulador de exceções lambda, nem meu manipulador de exceções explícito são chamados, então posso decidir se devo ou não suprimir a mensagem quando for um 404... vai direto para o elmah.

Já vi alguns exemplos de soluções alternativas para isso, mas todos têm padrões de configuração e arquivos que não estou usando. Tipo, coisas das quais nunca ouvi falar... Presumo que sejam de versões posteriores da Web API. Estou usando o .NET 6.

c#
  • 1 respostas
  • 30 Views
Martin Hope
SyndRain
Asked: 2025-04-08 04:05:29 +0800 CST

Solução alternativa no Entity Framework 6 para tabelas sem chave

  • 6

Temos um aplicativo .NET Framework 4.8 que usa o Entity Framework 6.

Agora, estamos com um problema: precisamos adicionar algumas tabelas que não garantem nenhuma unicidade (nenhuma chave primária e as linhas podem ser duplicadas). Não há como alterar as tabelas, pois isso pode causar problemas (esta tabela é preenchida novamente às 4 da manhã todos os dias por um programa que não podemos controlar).

Basicamente o mesmo problema descrito nesta pergunta , mas a resposta simplesmente disse para não usar o Entity Framework 6. Outra alternativa que posso pensar é ter uma exibição ou outro programa que importe os dados desta tabela para uma nova tabela.

Não existe realmente uma solução alternativa para a API Fluent ou para a Anotação no Entity Framework? Preciso mesmo introduzir uma maneira totalmente nova de acessar nosso banco de dados ou uma nova visualização só porque no EF6 uma entidade precisa ter uma chave primária?

Exemplo da relação das tabelas (tabela real, mas removi a maioria das colunas não relacionadas):

class Customer 
{
    [Key]
    public int CustomerID { get; set; }
    public string FirstName { get; set; }
    public virtual ICollection<CustomerOutboundEvent> CustomerOutboundEvents { get; set; }
}

// The new table
class CustomerOutboundEvent 
{
    // Adding key that doesn't actually exist will cause this error: Invalid column name 'CustomerOutboundEventID'.
    //[Key]
    //public int CustomerOutboundEventID { get; set; }
    public int CustomerID { get; set; }
    public Customer Customer { get; set; }
    public string OutboundNumber { get; set; }
    public string EventMessage { get; set; }
}
c#
  • 1 respostas
  • 98 Views
Martin Hope
unnecessary_bootstrapping
Asked: 2025-04-08 03:54:12 +0800 CST

É aceitável passar um ponteiro como argumento para um ponteiro duplo em C?

  • 6

Então, tenho feito alguns projetos de aprendizagem em C e estou começando a ficar mais confortável com ponteiros. No entanto, me deparei com alguns fenômenos sobre os quais não consigo encontrar muitas informações.

Basicamente, eu crio um array, para simplificar, estou começando com um array de inteiros:

int x[2] = {1, 3};

Agora, se eu quiser modificar o conteúdo deste array, descobri que posso criar uma função que recebe um ponteiro inteiro como parâmetro, passa xcomo argumento e desreferencia xespecificando um índice.

#include <stdio.h>

void foo(int* input){
    input[0] = 2;
    input[1] = 4;
}

int main(){
    int x[2] = {1, 3};
    printf("x[0] before: %d\nx[1] before: %d\n", x[0], x[1]);
    foo(x);
    printf("x[0] after: %d\nx[1] after: %d\n", x[0], x[1]);
}

saída

x[0] before: 1
x[1] before: 3
x[0] after: 2
x[1] after: 4

o que é interessante, mas não vejo isso sendo feito com frequência, então não tenho certeza se é aceitável.

Agora, para a questão maior, por algum motivo, sempre que quero alterar o endereço para o qual o próprio ponteiro aponta, especificando um novo valor e ponteiro e, em seguida, definindo o argumento para esse novo ponteiro, isso só parece funcionar quando eu faço o seguinte:

#include <stdio.h>
#include <stdlib.h>

void foo(int** input){
    int x[3] = {2, 4};
    int** ptr = x;
    *input = *ptr;
}

int main(){

    int x[2];
    x[0] = 1;
    x[1] = 3;
    printf("x[0] before: %d\n", x[0]);
    printf("x[1] before: %d\n", x[1]);
    foo(x);
    printf("x[0] after: %d\n", x[0]);
    printf("x[1] after: %d\n", x[1]);

    return 0;
}

Saída:

x[0] before: 1
x[1] before: 3
x[0] after: 2
x[1] after: 4

Então, tenho várias perguntas para as quais não consigo encontrar uma resposta, provavelmente devido à minha falta de vocabulário técnico:

1: Sempre que passo o array com e sem referência como argumento, por que o argumento se comporta como um array de ponteiros, sem inicializar um array de ponteiros e defini-lo primeiro para o endereço do array? Há alguma consequência não intencional em fazer isso?

2: Se o argumento for um ponteiro, em vez de um ponteiro para um ponteiro, é aceitável passar um ponteiro como argumento para uma função que recebe um ponteiro duplo como parâmetro, como eu fiz? Existe algum comportamento indefinido ao fazer isso que eu deva saber?

3: Por que isso funciona?

arrays
  • 2 respostas
  • 101 Views
Martin Hope
Alexander Shcheblikin
Asked: 2025-04-08 03:47:40 +0800 CST

Como usar uma função em setq com aspas?

  • 6

Suponha que eu esteja definindo uma var como esta:

(setq var '((:item1 "stringA") (:item2 "stringB")))

(isso funciona)

Agora eu gostaria que "stringA" fosse uma condicional, assim:

(setq var '((:item1 (if (> 6 (string-to-number (format-time-string "%u")))
                     "stringA"
                     "stringC"))
            (:item2 "stringB") ))

Isso não funciona, provavelmente por causa do operador de aspas (ou função?). Como deveria ser escrito para funcionar?

lisp
  • 1 respostas
  • 30 Views
Martin Hope
Marcel V.
Asked: 2025-04-08 03:20:03 +0800 CST

Várias instâncias Perl incorporadas em ambiente multithread

  • 9

Atualmente, estou desenvolvendo uma aplicação ASP.NET que, por motivos de legado, precisa executar alguns scripts Perl. Para isso, escrevi uma pequena biblioteca C++ que utiliza a API Perl embarcada. Essa biblioteca possui um único ponto de entrada (C) que permite que o código C# execute um script enquanto passa argumentos de linha de comando e um ambiente. Esse ambiente permite que o código C# imite uma chamada CGI para o script Perl.

Agora estou vendo algo estranho. O aplicativo C# permite a execução simultânea de (um número máximo de) scripts Perl. Para cada chamada, um ambiente diferente é criado e este é passado para minha biblioteca C++, que então o passa para a perl_parsefunção. O que noto então é que o ambiente real visto pelo script Perl não corresponde ao ambiente real passado, mas parece ser uma cópia antiga. Então, minha pergunta é: estou esquecendo de algo? Existe uma maneira especial de executar vários interpretadores Perl embarcados simultaneamente? Além disso, quando limito o número de threads simultâneas a 1, o problema persiste.

As partes relevantes da biblioteca C++ são as seguintes:

extern "C" __declspec(dllexport) BOOL ExecutePerlScript(PCSTR* environmentVariables,
                                                        PCSTR path)
{
    BOOL result(FALSE);

    // Create the Perl interpreter
    PerlInterpreter* my_perl(perl_alloc());
    if (NULL != my_perl)
    {
        PERL_SET_CONTEXT(my_perl);
        PL_perl_destruct_level = 1;
        perl_construct(my_perl);
        PL_origalen = 1;
        PL_exit_flags |= PERL_EXIT_DESTRUCT_END;

        // Initialize the Perl interpreter
        result = (perl_parse(my_perl,
                             XsInit,
                             NR_DEFAULT_ARGUMENTS,
                             DEFAULT_ARGUMENTS,
                             const_cast<char**>(environmentVariables)) == 0) ? TRUE : FALSE;

        // Run the interpreter
        if (result)
        {
            result = (perl_run(my_perl) == 0) ? TRUE : FALSE;
        }

        if (result)
        {
            result = LoadFile(path,
                              my_perl);
        }

        if (result)
        {
            // Execute the Perl script
            eval_pv("eval \"$" SCRIPT_TO_EVALUATE_VARIABLE_NAME "; 1\" or do { $" SCRIPT_EXECUTION_ERROR_VARIABLE_NAME " = $@; }",
                    TRUE);
        }

        // Destruct the interpreter
        PL_perl_destruct_level = 1;
        perl_destruct(my_perl);
        perl_free(my_perl);
    }

    return result;
}

extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL,
                               DWORD fdwReason,
                               LPVOID lpvReserved)
{
    BOOL result(FALSE);

    switch (fdwReason)
    {
    case DLL_PROCESS_ATTACH:
        if (0 == g_initCount)
        {
            PERL_SYS_INIT3(0,
                           NULL,
                           NULL);
        }
        g_initCount++;
        result = TRUE;
        break;
    case DLL_PROCESS_DETACH:
        if (g_initCount > 0)
        {
            g_initCount--;
            if (0 == g_initCount)
            {
                PERL_SYS_TERM();
            }
        }
        result = TRUE;
        break;
    }

    return result;
}

O formato environmentVariablesdo snippet acima é uma matriz de char*onde cada elemento está no formato <variable name>=<variable value>e o último elemento da matriz é NULL.

O script Perl que executo é o seguinte:

use strict;

use CGI qw/:standard/;

print "---- ENVIRONMENT ----\n";
for my $env (sort keys %ENV)
{
    print "$env = $ENV{$env}\n";
}
print "\n";

Por exemplo, uma das execuções (em um loop) passa o seguinte ambiente para a função C++:

- AUTH_TYPE =
- CONTENT_LENGTH = 47
- CONTENT_TYPE = application/x-www-form-urlencoded
- GATEWAY_INTERFACE = CGI/1.1
- PATH_INFO = /test.pl
- PATH_TRANSLATED = E:\Perl\PerlTestApplication\test.pl
- QUERY_STRING = lang=nl
- REMOTE_ADDR = 1.2.3.4
- REMOTE_HOST = remote.host
- REMOTE_USER =
- REQUEST_METHOD = POST
- SCRIPT_NAME = /test.pl
- SERVER_NAME = example.domain
- SERVER_PORT = 443
- SERVER_PROTOCOL = HTTP/1.1
- SERVER_SOFTWARE = Microsoft-IIS/10.0

e então o script imprime o seguinte ambiente:

---- ENVIRONMENT ----
AUTH_TYPE =
CONTENT_LENGTH = 45
CONTENT_TYPE = application/x-www-form-urlencoded
GATEWAY_INTERFACE = CGI/1.1
PATH_INFO = /test.pl
PATH_TRANSLATED = E:\Perl\PerlTestApplication\test.pl
QUERY_STRING = lang=nl
REMOTE_ADDR = 1.2.3.4
REMOTE_HOST = remote.host
REMOTE_USER =
REQUEST_METHOD = POST
SCRIPT_NAME = /test.pl
SERVER_NAME = example.domain
SERVER_PORT = 443
SERVER_PROTOCOL = HTTP/1.1
SERVER_SOFTWARE = Microsoft-IIS/10.0

Como pode ser visto, o valor da CONTENT_LENGTHvariável é diferente e, no ambiente Perl, é o mesmo de um ambiente passado anteriormente para o script. Portanto, de alguma forma, o ambiente que passo para a nova instância do interpretador Perl não é limpo e outro ambiente ainda é usado. Eu já uso o PERL_SET_CONTEXTpara definir o contexto na thread atual logo após a construção, mas isso simplesmente não parece ser suficiente.

Eu tentei isso em uma instalação Active Perl do Perl 5.24 e em uma instalação Strawberry Perl do Perl 5.30, mas ambas dão o mesmo resultado errôneo.

O que estou fazendo errado?

windows
  • 1 respostas
  • 107 Views
Martin Hope
hyunseo welcome
Asked: 2025-04-08 03:02:55 +0800 CST

pthread_rwlock_wrlock após pthread_rwlock_rdlock não retorna EDEADLK

  • 6

Na documentação do Open Group , afirma-se que:

NAME
pthread_rwlock_wrlock, pthread_rwlock_trywrlock - lock a read-write lock object for writing

...

The pthread_rwlock_wrlock() and pthread_rwlock_trywrlock() functions may fail if:

...

[EDEADLK]
The current thread already owns the read-write lock for writing or reading.

Entretanto, quando executo o seguinte código:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <pthread.h>

int main()
{
    int error; 

    pthread_rwlock_t *mutex = (pthread_rwlock_t *)malloc(sizeof(pthread_rwlock_t));
    if (mutex == NULL) {
        perror("malloc");
        abort();
    }

    pthread_rwlockattr_t attr;

    error = pthread_rwlockattr_init(&attr);
    if (error != 0)
    {
        fprintf(stderr, "%s:%d: pthread_rwlockattr_init failed: %s", __FILE__, __LINE__, strerror(error));
        abort();
    }

    error = pthread_rwlock_init(mutex, &attr);
    if (error != 0)
    {
        fprintf(stderr, "%s:%d: pthread_rwlock_init failed: %s", __FILE__, __LINE__, strerror(error));
        abort();
    }
    
    error = pthread_rwlock_wrlock(mutex);
    if (error != 0)
    {
        fprintf(stderr, "%s:%d: pthread_rwlock_wrlock failed: %s", __FILE__, __LINE__, strerror(error));
        abort();
    }
    
    error = pthread_rwlock_rdlock(mutex);
    if (error != 0)
    {
        fprintf(stderr, "%s:%d: pthread_rwlock_rdlock failed: %s", __FILE__, __LINE__, strerror(error));
        abort();
    }

    return 0;
}

A saída é:

main.c:53: pthread_rwlock_rdlock failed: Resource deadlock avoided

Mas quando executo o seguinte código:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <pthread.h>

int main()
{
    int error; 

    pthread_rwlock_t *mutex = (pthread_rwlock_t *)malloc(sizeof(pthread_rwlock_t));
    if (mutex == NULL) {
        perror("malloc");
        abort();
    }

    pthread_rwlockattr_t attr;

    error = pthread_rwlockattr_init(&attr);
    if (error != 0)
    {
        fprintf(stderr, "%s:%d: pthread_rwlockattr_init failed: %s", __FILE__, __LINE__, strerror(error));
        abort();
    }

    error = pthread_rwlock_init(mutex, &attr);
    if (error != 0)
    {
        fprintf(stderr, "%s:%d: pthread_rwlock_init failed: %s", __FILE__, __LINE__, strerror(error));
        abort();
    }
    
    error = pthread_rwlock_rdlock(mutex);
    if (error != 0)
    {
        fprintf(stderr, "%s:%d: pthread_rwlock_rdlock failed: %s", __FILE__, __LINE__, strerror(error));
        abort();
    }
    
    error = pthread_rwlock_wrlock(mutex);
    if (error != 0)
    {
        fprintf(stderr, "%s:%d: pthread_rwlock_wrlock failed: %s", __FILE__, __LINE__, strerror(error));
        abort();
    }
        
    return 0;
}

Nesse caso, a pthread_rwlock_wrlockchamada não retorna EDEADLKe é bloqueada.

A explicação do Open Group está incorreta? Parece mais razoável que EDEADLKseja devolvida. Qual poderia ser o problema aqui?

Testei isso no Linux usando o gcc, no meu computador com o WSL e também no OnlineGDB, e não funciona em nenhum desses ambientes. Parece ser um problema comum de implementação, e não um problema específico da minha configuração. Esse comportamento é intencional?

c
  • 1 respostas
  • 52 Views
Martin Hope
David
Asked: 2025-04-08 03:02:29 +0800 CST

Algoritmo para detectar loop completo ao iterar sobre uma lista

  • 10

Atribuição:

Escreva uma função cycle_sublist(lst, start, step)onde:

  • lsté uma lista
  • starté um número que satisfaz:0 <= start < len(lst)
  • stepé a quantidade que aumentamos seu índice a cada iteração

sem usar : fatiamento, importação, compreensão de lista, funções integradas como mape filter.

A função funciona da seguinte maneira: começamos a iterar sobre a lista de itens quando voltamos ao início ou a cruzamos novamente. Por exemplo:

cycle_sublist([1], 0, 2) -> [1]
cycle_sublist([6, 5, 4, 3], 0, 2) -> [6, 4]
cycle_sublist([7, 6, 5, 4, 3], 3, 1) -> [4, 3, 7, 6, 5]
cycle_sublist([4, 3, 2, 5, 1, 6, 9], 2, 2) -> [2, 1, 9, 3]
cycle_sublist([4, 3, 2, 5, 1, 6, 9], 5, 3) -> [6, 3, 1]

Meu problema é detectar quando completei um ciclo. Tentei:

  • Verifique meu passo anterior e os passos atuais e compare-os com o início. O problema é que há alguns casos em que falha.
  • Contando meus passos e verificando se já havia cruzado o início.

Nenhuma delas funcionou.

Aqui está meu código - com a lógica faltante para detectar o ciclo:

def cycle_sublist(lst,start,step):
    index = start 
    length = len(last)

    cycle_complete = False
    res = []

    while True:
        index = index % length if index >= length else index

        if ...:
            cycle_complete = True

        if cycle_complete and index >= start:
            break

        res.append(lst[index])

        index += step

    return res

Se possível, gostaria que você respondesse com o algoritmo para detectar o ciclo somente para que eu mesmo possa escrever o código.

python
  • 3 respostas
  • 129 Views
Martin Hope
user30200039
Asked: 2025-04-08 02:56:57 +0800 CST

Função Append do Python com defeito

  • 5

Estou usando o trinket.io, um IDE online para python3. Atualmente, não tenho acesso a nenhum outro IDE para download. Estou tentando criar um array numpy usando inúmeras instruções iterativas e condicionais. Quando imprimo cada lista, recebo os resultados corretos que espero, mas quando os acrescento ao array, os resultados são muito estranhos.

Este é meu código:

import numpy as np
import matplotlib.pyplot as plt
from sympy import *

x = Symbol('x')
y = Function('f')(x)

#Equation is ay_(n-1) + by_n + cy_(n+1) = d
a = 3
b = 4
c = 6
d = 4

#Final row equation: ey_(n-2)+fy_(n-1)+gy_(n) = d
e = 5
f = 3
g = 7
#Timestep
h = 0.2

#Initialize variables
y_0 = 0
final_point = 1


array = []
row = []
i = 1
array_row_size = int(final_point / h)
array_column_size = array_row_size + 1

for i in range(1,array_row_size+1):
  row.clear()
  if i == 1:
    row.append(b)
    row.append(c)
    for j in range(2, array_column_size-1):
      row.append(0)
    row.append(d)
  elif i == 2:
    row.append(a)
    row.append(b)
    row.append(c)
    for j in range(3, array_column_size-1):
      row.append(0)
    row.append(d)
  elif i < (array_column_size - 1) and i>2:
    for j in range(2,i):
      row.append(0)
    row.append(a)
    row.append(b)
    row.append(c)
    for j in range(i+1, array_column_size-1):
      row.append(0)
    row.append(d)
  else:
    for j in range(1, array_column_size-3):
      row.append(0)
    row.append(e)
    row.append(f)
    row.append(g)
    row.append(d)
  array.append(row)
  print("Row:", row)
  print("Array", array)
  
  i += 1

#print(array)

e estes são os resultados:

Row: [4, 6, 0, 0, 0, 4]
Array [[4, 6, 0, 0, 0, 4]]
Row: [3, 4, 6, 0, 0, 4]
Array [[3, 4, 6, 0, 0, 4], [3, 4, 6, 0, 0, 4]]
Row: [0, 3, 4, 6, 0, 4]
Array [[0, 3, 4, 6, 0, 4], [0, 3, 4, 6, 0, 4], [0, 3, 4, 6, 0, 4]]
Row: [0, 0, 3, 4, 6, 4]
Array [[0, 0, 3, 4, 6, 4], [0, 0, 3, 4, 6, 4], [0, 0, 3, 4, 6, 4], [0, 0, 3, 4, 6, 4]]
Row: [0, 0, 5, 3, 7, 4]
Array [[0, 0, 5, 3, 7, 4], [0, 0, 5, 3, 7, 4], [0, 0, 5, 3, 7, 4], [0, 0, 5, 3, 7, 4], [0, 0, 5, 3, 7, 4]]

Isso é obviamente muito diferente do esperado, pois eu esperaria que cada linha fosse diferente na matriz, enquanto que em cada iteração todas as linhas são atualizadas e são as mesmas.

python
  • 1 respostas
  • 57 Views
Martin Hope
Alfredo Morales
Asked: 2025-04-08 02:42:31 +0800 CST

O aplicativo Spring em execução no contêiner não consegue acessar o servidor de configuração

  • 6

Estou tentando executar meus aplicativos Spring em contêineres,

no momento, tenho 2 contêineres, 1 executando meu Spring Config Server, executando na porta 8888, se eu abrir um navegador, obtenho as propriedades, sem problemas (eu acho),

solicitado do navegador

o segundo contêiner é o Spring Eureka Discovery Server, rodando na porta 8787, mas quando eu construo o projeto no maven, depois construo a imagem e a executo, recebo estes erros no log:

2025-04-07 12:03:56 2025-04-07T18:03:56.388Z  INFO 1 --- [app-seven-eureka] [           main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://10.1.10.220:8888
2025-04-07 12:03:59 2025-04-07T18:03:59.853Z  INFO 1 --- [app-seven-eureka] [           main] c.c.c.ConfigServicePropertySourceLocator : Exception on Url - http://10.1.10.220:8888:org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://10.1.10.220:8888/app-seven-eureka/default": No route to host. Will be trying the next url if available
2025-04-07 12:03:59 2025-04-07T18:03:59.853Z  WARN 1 --- [app-seven-eureka] [           main] c.c.c.ConfigServicePropertySourceLocator : Could not locate PropertySource: I/O error on GET request for "http://10.1.10.220:8888/app-seven-eureka/default": No route to host
2025-04-07 12:03:59 2025-04-07T18:03:59.857Z  INFO 1 --- [app-seven-eureka] [           main] .s.AppMSEurekaApplication : No active profile set, falling back to 1 default profile: "default"

e o aplicativo não responde e alguns outros erros são lançados, e como não consigo ver, isso ocorre porque ele não está carregando os parâmetros de configuração do servidor de configuração...

iniciar o segundo aplicativo do Eclipse ou executar o jar no terminal não gera erro, o servidor inicia corretamente e responde na porta correta, quando está dentro do contêiner,

este é meu dockerfile :

FROM openjdk:25-oraclelinux8

WORKDIR /app

COPY target/app-seven-eureka-1.0.0.jar /app/app7.jar

EXPOSE 8787

ENTRYPOINT ["java", "-jar", "/app/app7.jar"]

Alterei meu application.properties para bootstrap.properties conforme recomendado nesta pergunta, mas sem efeito: Spring Cloud Config Client: Buscando configuração do servidor errado

Meu comando para executar o contêiner é: docker run -p 8787:8787 app-seven-eureka

Então, estou esquecendo de alguma coisa? Preciso passar um parâmetro adicional ao criar o contêiner? Ou qual pode ser o problema?

Solução:

Mudei para o docker composer para criar os contêineres e criei uma rede entre eles:

services:
    service-config:
        container_name: app-seven-config
        networks: 
          - app-seven-network
    
    service-eureka:
        container_name: app-seven-eureka
        networks: 
          - app-seven-network
        extra_hosts:
          - "docker.internal:127.0.0.1"
networks:
  app-seven-network:
    driver: bridge
spring-boot
  • 1 respostas
  • 34 Views
Martin Hope
TheMexican
Asked: 2025-04-08 01:51:12 +0800 CST

Por que o código Dart com assert() não está gerando erro [duplicado]

  • 5
Esta pergunta já tem respostas aqui :
por que o método assert do dart não está funcionando? (4 respostas)
Como habilitar asserções no dart? (2 respostas)
Fechado há 18 horas .

Tenho o seguinte código:

void main(List<String> arguments) {
  print('Enter your age: ');
  try {
    int? age = int.tryParse(stdin.readLineSync()!);
    print('Age is $age');
    assert(age != null, 'Age cannot be null');
    print('You are $age years old');
  } catch (e) {
    print('You gave us a bad age');
  }
}

Quando executo e insiro a idade como uma string como 'nnnnn' (algo que não pode ser analisado como um int), espero que a declaração gere um erro, mas a saída é 'Você tem anos nulos'. Sou novo no Dart e isso está me deixando louco. Provavelmente estou fazendo algo errado. Obrigado.

flutter
  • 1 respostas
  • 46 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