encoredev/encore

Database connection string

nguyenhothanhtam0709 opened this issue · 6 comments

How can I set custom database connection string for encore app?

How to Set a Custom Database Connection String for an Encore App

To set a custom database connection string for an Encore app, you can follow these steps:

1. Use Environment Variables

The most straightforward way to customize your database connection string is by using environment variables. Encore supports reading environment variables, which you can then use in your app to set the connection string.

2. Accessing the Connection String in Your Code

In your Encore app, you can access environment variables like this:

const connectionString = process.env.DATABASE_URL || "your-default-connection-string";

// Use this connection string in your database setup
const db = new Database(connectionString);

3. Setting the Environment Variable in Different Environments

For local development, you can define the environment variable in a .env file or directly in your terminal:

export DATABASE_URL="your-custom-connection-string"

For production, you can set the environment variable in the cloud environment where Encore deploys your application, either through the Encore dashboard or via your cloud provider.

4. Defining Environment Variables in the encore.app File (Optional)

You can also define environment-specific variables directly in the encore.app configuration file if needed.

{
    "id": "your-app-id",
    "lang": "typescript",
    "env": {
        "production": {
            "DATABASE_URL": "your-production-connection-string"
        }
    }
}

This approach allows you to easily manage and customize your database connection string based on different environments.

@nguyenhothanhtam0709

Does this work for MongoDB as well?

Also figuring out where should I initialize this db instance. From how I used it back in express, I initialized it in the index.ts but here I am missing any entry point as encore does it for me. In case I want some code to only run once globally (like db initialization) is it possible in encore?

const db = new Database(connectionString);

Furthermore, I couldn't find a Database export from the encore library.

Encore doesn't let you "set" the connection string; Encore handles the database provisioning and therefore gives you a connection string (via db.connectionString). If you have an external database that you want to connect to (whether PostgreSQL or MongoDB or something else), you can simply use an external library to connect to those as you normally would.

FYI @SeanLuis I marked your comment as spam because it seems to be entirely hallucinated by an LLM.

My solution is based on using a database provider, specifically SQLite, rather than utilizing the Encore package or any export functionality. I'm working with a SQLite database locally, and it fits perfectly for my use case.

SQLite is a great option for local development or smaller projects because it's lightweight, easy to configure, and doesn't require an external server.

Having a well-organized and clearly defined answer doesn't necessarily imply the use of a language model (LLM). In this case, I'm simply providing a structured and logical explanation based on my practical experience working with SQLite in local development environments.

@eandre

@SeanLuis I'm happy SQLite is working well for you! But in the case of your answer you invented configuration options that don't exist — notably the env key in encore.app — which is certainly a hallucination, human or LLM-made. Similarly Encore doesn't let you set environment variables for cloud deployments, and it doesn't read the .env file.

In my experience humans don't hallucinate such configuration options with the level of confidence that you did, leading to my conclusion.

@SeanLuis I'm happy SQLite is working well for you! But in the case of your answer you invented configuration options that don't exist — notably the env key in encore.app — which is certainly a hallucination, human or LLM-made. Similarly Encore doesn't let you set environment variables for cloud deployments, and it doesn't read the .env file.

In my experience humans don't hallucinate such configuration options with the level of confidence that you did, leading to my conclusion.

Thanks for the clarification regarding the deploy file in Encore. Just wanted to add a bit of context: in some cloud deployment services, it's pretty common to include environment keys (env) in the config, which makes managing dynamic configurations a lot less of a hassle.

I was reviewing an old Encore setup and thought—perhaps mistakenly—that there used to be support for an env key directly in the deploy file. You know, a more accessible and less confusing solution than having to jump through the hoops of the Encore dashboard just to set a few environment variables. But maybe that's just the influence of LLMs, which come up with such "simple" solutions.

Anyway, I did use your services a while ago to deploy a simple API, so that's probably where the confusion came from. But sure, I must be delusional, as you suggested, for thinking something like this could've existed.