Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The dotenv! macro looks for the .env in the workspace root dir instead of crate root dir #74

Open
stevepryde opened this issue May 10, 2023 · 4 comments

Comments

@stevepryde
Copy link

I commonly work in a workspace with multiple binary crates that each have their own .env file. However it seems the dotenv!() macro is looking for the .env file in the workspace root instead of the crate root dir.

Any idea why this would be happening?

@stevepryde stevepryde changed the title The dotenvy! macro looks for the .env in the workspace root dir instead of crate root dir The dotenv! macro looks for the .env in the workspace root dir instead of crate root dir May 10, 2023
@allan2
Copy link
Owner

allan2 commented May 10, 2023

Hi Steve,

I was able to reproduce your problem. allan2/dotenvy-workspace-example

The issue is that dotenvy::dotenv and the dotenvy! macro both start finding from std::env::current_dir.
If the user runs from the workspace root, then the current dir is the workspace root.
So your crate .env would only get picked up if you run from the crate root.

One solution is to use CARGO_MANIFEST_DIR to get the crate root.

let manifest_dir = std::env::var("CARGO_MANIFEST_DIR")?;
dotenvy::from_path(format!("{manifest_dir}/.env"))?;
std::env::var("FOO")?;

Of course, this loads at runtime instead of compile time. Let me know if that is acceptable for you.

@stevepryde
Copy link
Author

I was hoping to use the dotenv!() macro to have the best of both worlds between env!() and having a .env file and I don't think this solution works for that. Any chance of a toml file or some way to provide the path at compile time?

@85oskxr
Copy link

85oskxr commented Aug 1, 2023

Has anyone found a reasonable solution to this problem? In my case the .env file needs to be in the parent directory as other language projects will use it.

@cbeck88

This comment was marked as off-topic.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants