1
resposta

Error no deploy

Meu código está salvo em https://github.com/xing-wang-kai/APIREST_KOTLIN_SPRING_BOOT

olá tudo bem com você? achei o curso incrivel, tive alguns problemas com security e tive de apreender a usar o security na versão 6, foi ótimo para o apreendizagem, porém estou com problemas no deploy, nao entendo porqu está dando esses error. não achei nada na web,, nem mesmo no chatGpt alguém pode me ajudar?

2025-01-10T19:14:13.449274+00:00 app[web.1]: [2m2025-01-10T19:14:13.449Z[0;39m [32m INFO[0;39m [35m2[0;39m [2m---[0;39m [2m[ main][0;39m [36mo.s.s.web.DefaultSecurityFilterChain [0;39m [2m:[0;39m Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@4be0a27d, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5f366587, org.springframework.security.web.context.SecurityContextHolderFilter@1f87607c, org.springframework.security.web.header.HeaderWriterFilter@76d7881e, org.springframework.web.filter.CorsFilter@6003ad65, org.springframework.security.web.authentication.logout.LogoutFilter@33bb3f86, com.orgs.orgs.security.JWTLoginFilter@2ec99035, com.orgs.orgs.security.JWTAuthenticationFilter@60743cdb, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@6ddee60f, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@4aa2877c, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@c02670f, org.springframework.security.web.session.SessionManagementFilter@7945b206, org.springframework.security.web.access.ExceptionTranslationFilter@6b1b19cf, org.springframework.security.web.access.intercept.AuthorizationFilter@2a2dc0a] 2025-01-10T19:14:14.336707+00:00 app[web.1]: [2m2025-01-10T19:14:14.305Z[0;39m [32m INFO[0;39m [35m2[0;39m [2m---[0;39m [2m[ main][0;39m [36mo.s.b.w.embedded.tomcat.TomcatWebServer [0;39m [2m:[0;39m Tomcat started on port(s): 8080 (http) with context path '' 2025-01-10T19:14:14.392486+00:00 app[web.1]: [2m2025-01-10T19:14:14.392Z[0;39m [32m INFO[0;39m [35m2[0;39m [2m---[0;39m [2m[ main][0;39m [36mcom.orgs.orgs.OrgsApplicationKt [0;39m [2m:[0;39m Started OrgsApplicationKt in 7.641 seconds (process running for 8.167) 2025-01-10T19:15:05.695176+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch 2025-01-10T19:15:05.708964+00:00 heroku[web.1]: Stopping process with SIGKILL 2025-01-10T19:15:05.805973+00:00 heroku[web.1]: Process exited with status 137 2025-01-10T19:16:39.014608+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/" host=powerful-savannah-40224-6dd28593c09e.herokuapp.com request_id=3ae3a771-0fa7-495f-8d13-1d047472c8aa fwd="189.38.192.6" dyno= connect= service= status=503 bytes= protocol=https 2025-01-10T19:16:39.620441+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/favicon.ico" host=powerful-savannah-40224-6dd28593c09e.herokuapp.com request_id=b08d2b1c-3587-447a-b078-3c608bbfb905 fwd="189.38.192.6" dyno= connect= service= status=503 bytes= protocol=https 2025-01-10T19:20:08.380702+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/" host=powerful-savannah-40224-6dd28593c09e.herokuapp.com request_id=8f077e5e-621a-4045-863a-3488a10bbb14 fwd="189.38.192.6" dyno= connect= service= status=503 bytes= protocol=https 2025-01-10T19:20:09.100129+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/favicon.ico" host=powerful-savannah-40224-6dd28593c09e.herokuapp.com request_id=90577028-a922-447e-8145-c1fd8864587a fwd="189.38.192.6" dyno= connect= service= status=503 bytes= protocol=https

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá! Tudo bem?

Isso geralmente ocorre quando a aplicação não está escutando na porta correta que o Heroku define através da variável de ambiente $PORT.

Aqui estão algumas dicas para resolver esse problema:

  1. Verifique a Configuração da Porta: Certifique-se de que sua aplicação está configurada para escutar na porta que o Heroku fornece. No Kotlin/Spring Boot, você pode fazer isso alterando o application.properties ou application.yml para usar a variável de ambiente PORT.

    server.port=${PORT:8080}
    
  2. Procfile: Verifique se você tem um Procfile na raiz do seu projeto. Ele deve conter algo como:

    web: java -jar build/libs/sua-aplicacao.jar
    

    Certifique-se de substituir sua-aplicacao.jar pelo nome correto do seu arquivo JAR.

  3. Problemas no arquivos WebSecurityConfiguration: Nesse arquivo verifiquei que os últimos métodos de @Bean não estavam localizados dentro da classe SecurityConfig, então pode ser um dos motivos do problema da compilação, recomendo faça esse ajuste adicionando esses métodos para a classe, como mostrado no exemplo abaixo:

@Configuration
class SecurityConfig(
    private val userDetailsService: UserDetailsService,
    private val jwtUtil: JwtUtils
) {

    @Bean
    fun securityFilterChain(http: HttpSecurity, authenticationManager: AuthenticationManager): SecurityFilterChain {
        http
            .csrf { it.disable() }
            .cors { }
            .authorizeHttpRequests { auth ->
                auth
                    .requestMatchers(HttpMethod.POST, "/users").permitAll()
                    .requestMatchers(HttpMethod.POST, "/users/**").permitAll()
                    .requestMatchers(HttpMethod.GET, "/users").permitAll()
                    .requestMatchers(HttpMethod.GET, "/users/*").permitAll()
                    .requestMatchers(HttpMethod.POST, "/login").permitAll()
                    .requestMatchers(HttpMethod.GET, "/products/**").hasAuthority("LEITURA_ESCRITA")
                    .requestMatchers(HttpMethod.GET, "/products").hasAuthority("LEITURA_ESCRITA")
                    .anyRequest().authenticated()

            }

            .sessionManagement { session ->
                session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            }
            .addFilterBefore(
                JWTLoginFilter(authManager = authenticationManager, jwtUtil = jwtUtil),
                UsernamePasswordAuthenticationFilter::class.java
            )
            .addFilterBefore(
                JWTAuthenticationFilter(jwtUtil = jwtUtil),
                UsernamePasswordAuthenticationFilter::class.java
            )

        return http.build()
    }

    @Bean
    fun corsConfigurationSource(): CorsConfigurationSource {
        val corsConfig = CorsConfiguration()
        corsConfig.allowedOrigins = listOf("*") // Permitir todas as origens; restrinja em produção
        corsConfig.allowedMethods = listOf("GET", "POST", "PUT", "DELETE", "OPTIONS")
        corsConfig.allowedHeaders = listOf("*")
        corsConfig.allowCredentials = true

        val source = UrlBasedCorsConfigurationSource()
        source.registerCorsConfiguration("/**", corsConfig)
        return source
    }

    @Bean
    fun passwordEncoder(): PasswordEncoder {
        return BCryptPasswordEncoder()
    }

    @Bean
    fun authenticationManager(
        http: HttpSecurity
    ): AuthenticationManager {
        return http.getSharedObject(AuthenticationManagerBuilder::class.java)
            .userDetailsService(userDetailsService)
            .passwordEncoder(passwordEncoder())
            .and()
            .build()
    }

}

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.