Project won't deploy
samson
HOBBYOP

a year ago

Hello guys,

I'm completely new to this hosting stuff and I'm trying to host a discord bot that I used to start locally from VS Studio before.

I hooked up my github and try to deploy the container.

Id: 24415e1c-9ff5-4133-b834-05af53c29590

Build suceeds but deploy crashes with following message:

   at System.ModuleHandle.ResolveType(QCallModule module, Int32 typeToken, IntPtr* typeInstArgs, Int32 typeInstCount, IntPtr* methodInstArgs, Int32 methodInstCount, ObjectHandleOnStack type)
   at System.ModuleHandle.ResolveTypeHandle(Int32 typeToken, RuntimeTypeHandle[] typeInstantiationContext, RuntimeTypeHandle[] methodInstantiationContext)
   at System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
   at System.Reflection.CustomAttribute.FilterCustomAttributeRecord(MetadataToken caCtorToken, MetadataImport& scope, RuntimeModule decoratedModule, MetadataToken decoratedToken, RuntimeType attributeFilterType, Boolean mustBeInheritable, ListBuilder`1& derivedAttributes, RuntimeType& attributeType, IRuntimeMethodInfo& ctorWithParameters, Boolean& isVarArg)
   at System.Reflection.CustomAttribute.IsCustomAttributeDefined(RuntimeModule decoratedModule, Int32 decoratedMetadataToken, RuntimeType attributeFilterType, Int32 attributeCtorToken, Boolean mustBeInheritable)
   at System.Reflection.CustomAttribute.IsDefined(RuntimeType type, RuntimeType caType, Boolean inherit)
   at System.Diagnostics.StackTrace.ToString(TraceFormat traceFormat, StringBuilder sb)
   at System.Diagnostics.StackTrace.ToString(TraceFormat traceFormat)
   at System.Exception.get_StackTrace()
   at System.Exception.ToString()
   at Program.Main(String[] args) in /app/SubBot/Program.cs:line 44
   at Program.<main>(String[] args)```</main>
Solved

118 Replies

samson
HOBBYOP

a year ago

Project won't deploy


Are you using nixpacks or a Dockerfile?


It looks like you are running a .NET 8.0 project on the wrong version (.NET 6.0?)


samson
HOBBYOP

a year ago

I do have a docker file but I saw it building with nix packs


samson
HOBBYOP

a year ago

That's the build log.

Region: europe-west4]

Using Nixpacks

context: rpk8-2czM ╔═════════════════════ Nixpacks v1.34.1 ═════════════════════╗ ║ setup │ dotnet-sdk_8 ║ ║────────────────────────────────────────────────────────────║ ║ install │ dotnet restore ║ ║────────────────────────────────────────────────────────────║ ║ build │ dotnet publish --no-restore -c Release -o out ║ ║────────────────────────────────────────────────────────────║ ║ start │ ./out/SubBot ║ ╚════════════════════════════════════════════════════════════╝ [internal] load build definition from Dockerfile [internal] load build definition from Dockerfile ✔ 0ms [internal] load build definition from Dockerfile [internal] load build definition from Dockerfile ✔ 10ms [internal] load metadata for ghcr.io/railwayapp/nixpacks:ubuntu-1741046653 [internal] load metadata for ghcr.io/railwayapp/nixpacks:ubuntu-1741046653 ✔ 149ms [internal] load .dockerignore [internal] load .dockerignore [internal] load .dockerignore ✔ 0ms [internal] load .dockerignore [internal] load .dockerignore ✔ 11ms [internal] load build context ✔ 0ms [internal] load build context [internal] load build context ✔ 637ms [3/9] COPY .nixpacks/nixpkgs-5148520bfab61f99fd25fb9ff7bfbb50dad3c9db.nix .nixpacks/nixpkgs-5148520bfab61f99fd25fb9ff7bfbb50dad3c9db.nix ✔ 0ms – CACHED [4/9] RUN nix-env -if .nixpacks/nixpkgs-5148520bfab61f99fd25fb9ff7bfbb50dad3c9db.nix && nix-collect-garbage -d ✔ 0ms – CACHED [5/9] COPY . /app/. [5/9] COPY . /app/. ✔ 154ms [6/9] RUN dotnet restore Welcome to .NET 8.0!

SDK Version: 8.0.100-preview.5.23303.2


set the ENV NIXPACKS_CSHARP_SDK_VERSION=8.0.311


It shouldnt use Nixpacks if you have a dockerfile though


This is my Dockerfile, make sure its in your base directory (of your github repo)

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /app

# Copy and restore dependencies
COPY . .
RUN dotnet restore

# Publish the application
RUN dotnet publish -c Release -o /out

# Use a lightweight runtime image
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /out .

# Set the entry point
ENTRYPOINT ["dotnet", "Discord Bot.dll"]

samson
HOBBYOP

a year ago

This is mine:

`# Build-Phase mit SDK

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build

WORKDIR /src

COPY ["SubBot/SubBot.csproj", "SubBot/"]

COPY . .

WORKDIR "/src/SubBot"

RUN dotnet publish "SubBot.csproj" -c Release -r linux-x64 --self-contained true -o /app/publish /p:PublishSingleFile=true /p:PublishTrimmed=false

Minimaler Runtime-Container – ohne dotnet runtime

FROM debian:bullseye-slim AS final

WORKDIR /app

COPY --from=build /app/publish .

RUN chmod +x SubBot

ENTRYPOINT ["./SubBot"]`

1363935138869940687


samson
HOBBYOP

a year ago

and it lies here

1363935162437599393


Is that the base directory for your repo? For mine, I have the Dockerfile in the solution directory.

1363935578369818944


samson
HOBBYOP

a year ago

This is at the top

1363935798352810208


samson
HOBBYOP

a year ago

should i place it there?


Yes, that is the git repo's base directory since it has the .git folder in it


samson
HOBBYOP

a year ago

Sorry, i feel utterly dumb asking this questions...


Nah its fine


samson
HOBBYOP

a year ago

now im getting this error:

✕ [build 6/6] RUN dotnet publish "SubBot.csproj" -c Release -r linux-x64 --self-contained true -o /app/publish /p:PublishSingleFile=true /p:PublishTrimmed=false

process "/bin/sh -c dotnet publish "SubBot.csproj" -c Release -r linux-x64 --self-contained true -o /app/publish /p:PublishSingleFile=true /p:PublishTrimmed=false" did not complete successfully: exit code: 145


samson
HOBBYOP

a year ago

`The command could not be loaded, possibly because:

  • You intended to execute a .NET application: The application 'publish' does not exist.
  • You intended to execute a .NET SDK command: A compatible .NET SDK was not found. Requested SDK version: 8.0.100 global.json file: /src/SubBot/global.json Installed SDKs: Install the [8.0.100] .NET SDK or update [/src/SubBot/global.json] to match an installed SDK. Learn about SDK resolution: https://aka.ms/dotnet/sdk-not-found`

I believe you just need to change all of the SubBot.csproj instances with ./SubBot.csproj


Since you moved the Dockerfile to a different directory


samson
HOBBYOP

a year ago

in my dockerfile aight?


Yes


should look like that

1363937355127456055


samson
HOBBYOP

a year ago

i changed my dockerfile to this self containing thing. should i try yours and change the names obviously?


Wait sorry it should be ./SubBot/SubBot.csproj


Uh


Yeah one sec


FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /app

# Copy and restore dependencies
COPY . .
RUN dotnet restore

# Publish the application
RUN dotnet publish -c Release -o /out

# Use a lightweight runtime image
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /out .

# Set the entry point
ENTRYPOINT ["dotnet", "Discord Bot.dll"]

This is a pretty bare bones one


# See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base
USER $APP_UID
WORKDIR /app


# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["Whispbot.csproj", "."]
RUN dotnet restore "./Whispbot.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "./Whispbot.csproj" -c $BUILD_CONFIGURATION -o /app/build

# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./Whispbot.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Whispbot.dll"]

This is the official visual studio one


I have my project and solution in the same directory so you would have to change the stuff around slightly


samson
HOBBYOP

a year ago

oh boi


samson
HOBBYOP

a year ago

then im trying that offical one


When I created my newest project, I set it up to use the dockerfile by default


samson
HOBBYOP

a year ago

on railway?


On visual studio


I dont think you can change it now


But ill generate a dockerfile for you


samson
HOBBYOP

a year ago

`# See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

This stage is used when running from VS in fast mode (Default for Debug configuration)

FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base

USER $APP_UID

WORKDIR /app

This stage is used to build the service project

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build

ARG BUILD_CONFIGURATION=Release

WORKDIR /src

COPY ["SubBot/SubBot.csproj", "SubBot/"]

RUN dotnet restore "SubBot/SubBot.csproj"

COPY . .

WORKDIR "/src/SubBot"

RUN dotnet build "./SubBot.csproj" -c $BUILD_CONFIGURATION -o /app/build

This stage is used to publish the service project to be copied to the final stage

FROM build AS publish

ARG BUILD_CONFIGURATION=Release

RUN dotnet publish "./SubBot.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)

FROM base AS final

WORKDIR /app

COPY --from=publish /app/publish .

ENTRYPOINT ["./SubBot", "SubBot.dll"]`

i haave this now


I would assume that would work if you change the RUN dotnet line to have "./SubBot/SubBot.csproj" and the entrypoint to be ["dotnet", "SubBot.dll"]


samson
HOBBYOP

a year ago

why dotnet?


Dotnet = .NET


samson
HOBBYOP

a year ago


# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base
USER $APP_UID
WORKDIR /app

# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["SubBot/SubBot.csproj", "SubBot/"]
RUN dotnet restore "SubBot/SubBot.csproj"
COPY . .
WORKDIR "/src/SubBot"
RUN dotnet build "./SubBot/SubBot.csproj" -c $BUILD_CONFIGURATION -o /app/build

# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./SubBot/SubBot.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "SubBot.dll"]```

looks like this now


Its the CLI for c#


That looks correct


samson
HOBBYOP

a year ago

pushing it.


samson
HOBBYOP

a year ago

i mean i have no clue what those lines excatly do 😄 so yea...


samson
HOBBYOP

a year ago

The command could not be loaded, possibly because:

  • You intended to execute a .NET application: The application 'build' does not exist.
  • You intended to execute a .NET SDK command: A compatible .NET SDK was not found.

Requested SDK version: 8.0.100

global.json file: /src/SubBot/global.json

Installed SDKs:

Install the [8.0.100] .NET SDK or update [/src/SubBot/global.json] to match an installed SDK.

Learn about SDK resolution:

https://aka.ms/dotnet/sdk-not-found


samson
HOBBYOP

a year ago

should i remove the global.json?


yeah


its interfering with it


samson
HOBBYOP

a year ago

`MSBUILD : error MSB1009: Project file does not exist. Switch: ./SubBot/SubBot.csproj ✕ [build 7/7] RUN dotnet build "./SubBot/SubBot.csproj" -c Release -o /app/build process "/bin/sh -c dotnet build "./SubBot/SubBot.csproj" -c $BUILD_CONFIGURATION -o /app/build" did not complete successfully: exit code: 1 Dockerfile:16

14 | COPY . . 15 | WORKDIR "/src/SubBot" 16 | >>> RUN dotnet build "./SubBot/SubBot.csproj" -c $BUILD_CONFIGURATION -o /app/build 17 | 18 | # This stage is used to publish the service project to be copied to the final stage

ERROR: failed to solve: process "/bin/sh -c dotnet build "./SubBot/SubBot.csproj" -c $BUILD_CONFIGURATION -o /app/build" did not complete successfully: exit code: 1`

<:KEKW:947842215005286460>

oh boi i guess its a path thing


uhhhhhhhhhhhhhhhhh


samson
HOBBYOP

a year ago

yea 😄


Oh okay im stupid


samson
HOBBYOP

a year ago

No


samson
HOBBYOP

a year ago

IM stupid!


RUN dotnet build "SubBot.csproj"


do that


I told you to change that one


samson
HOBBYOP

a year ago

publish aswell?


and the same with publish


samson
HOBBYOP

a year ago

yea


samson
HOBBYOP

a year ago

it's taking longer now


samson
HOBBYOP

a year ago

ahh


samson
HOBBYOP

a year ago

its active but crashed


samson
HOBBYOP

a year ago

The configuration file 'appsettings.json' was not found and is not optional. The expected physical path was '/app/appsettings.json'.

need to replace the config logic with the enviroment logic from raailway for tokens i guess


Or you can put it in a volume


But for tokens definitely use ENV


samson
HOBBYOP

a year ago

Do i place them into the service variables or shared variables?


service unless you are using the token across multiple services which is unlikely (e.g. you have a main bot and an seperate API service)


if you arent planning on using ENVs on more than one service then use the service variables


samson
HOBBYOP

a year ago

nah its just a simple bot for registering substitute players.

i need to connect a database now.

That was the reason to try railway because i didnt want to host a db myself locally


samson
HOBBYOP

a year ago

Do you have a .net bot with dsharpplus as well?


i created a custom discord api wrapper package for my bots


i dont use any packages


samson
HOBBYOP

a year ago

Ah, okay nice.

And if I read thatr correctly i log to Console.WriteLine(); to see it in Railway?


Yes


samson
HOBBYOP

a year ago

ah and your were a huuuuuuuuge help!!!


samson
HOBBYOP

a year ago

Thank you so much!


I was bored


No problem


samson
HOBBYOP

a year ago

Best thing that could happen


very


samson
HOBBYOP

a year ago

is it possible to run an sql file to fill a database here?


ive never tried it


you could probably use an external program like tableplus to run SQL queries on the database


samson
HOBBYOP

a year ago

Ah yea, i can connect to the db from my computer and run it there. im using heidisql


samson
HOBBYOP

a year ago

that should work


yeah that should work


the database should have a public and a private url


use public to connect to it externally and the private to connect to it on your main program when running on railway (to save on egress costs)


samson
HOBBYOP

a year ago

postgresql://postgres:********@metro.proxy.rlwy.net:42005/railway

Like this?


yes


that should be the public one


samson
HOBBYOP

a year ago

the internal one is just a variable

${{ Postgres.DATABASE_URL }}


Yup


samson
HOBBYOP

a year ago

oops i just saw i used mysql back then 😄

Reviving the bot atm 😄


samson
HOBBYOP

a year ago

_connectionString = enviroment.mysql.DATABASE_URL; MySqlConnection connection = new MySqlConnection(_connectionString); try { await connection.OpenAsync(); Console.WriteLine("Die Verbindung zur HL-Datenbank wurde erfolgreich geöffnet."); return connection; } catch (Exception ex) { Console.WriteLine("Fehler beim Öffnen der Verbindung zur HL-Datenbank: " + ex.Message); return new MySqlConnection(); }

that would be my guess to connect internally


Yes, Is environment a custom class or?


it should be

Environment.GetEnvironmentVariable("DATABASE_URL")

samson
HOBBYOP

a year ago

ah yeas. i meant that 😄


samson
HOBBYOP

a year ago

do i have to insert the databse variables into my service variables or are they "gobally" by default?


you would have to insert them


${{MySql.DATABASE_URL}}


Or whatever


samson
HOBBYOP

a year ago

ahhh now i see the connection

1363948659426857200


samson
HOBBYOP

a year ago

Thank you!!!

1363950063730167819


samson
HOBBYOP

a year ago

How do you debug your bot when its running on railway?

Is it the old write logs, deploy and repeat thing? 😄


ofcourse

1363950685242130462


samson
HOBBYOP

a year ago

love that <:KEKW:947842215005286460>


samson
HOBBYOP

a year ago

im used to it


samson
HOBBYOP

a year ago

oh bro thanks again


no problem!


a year ago

relatable


a year ago

looks like we’re good to call this solved?


Yup


a year ago

!s


Status changed to Solved adam about 1 year ago


Welcome!

Sign in to your Railway account to join the conversation.

Loading...