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

[sqlx-cli] prepare unable to find queries if cargo target-dir is set in config.toml #1706

Open
sedrik opened this issue Feb 15, 2022 · 7 comments

Comments

@sedrik
Copy link
Contributor

sedrik commented Feb 15, 2022

I generally use the following ~/.cargo/config.toml

[build]
      target-dir = "/home/sedrik/.cargo/target"

But having this setup and a lib crate with binaries in it caused cargo sqlx prepare -- --lib --all-features to fail to find any new queries even if I did a cargo clean and removed the target directory. I also noted that sqlx's outputs files into the projects target directory but removing those as well did not help.

Removing the config for target-dir made prepare work again.

@jplatte
Copy link
Contributor

jplatte commented Feb 15, 2022

I've previously run into this as well. This would require a call to cargo metadata to be able to find the actual location (output contains a target_dir field), but requiring that for non-workspaces would be a breaking change for non-cargo build systems (unless they set CARGO_TARGET_DIR), see #1415.

@sedrik
Copy link
Contributor Author

sedrik commented Feb 15, 2022

Hmm, it would be nice to handle it if cargo is available though, or at least give a better error indicating what is wrong.

@jplatte
Copy link
Contributor

jplatte commented Feb 15, 2022

Hm yeah, doing it when cargo is available sounds like a good idea. Then the repeated cargo metadata calls that #1415 introduced can be removed again too. I don't think I have time to work on it myself, but I can write up some instructions if you're interested in writing the PR.

@sedrik
Copy link
Contributor Author

sedrik commented Feb 15, 2022

I can't say when/if I will have time to pick it up but if you write some instructions I will try to find some time for it 👍

@jplatte
Copy link
Contributor

jplatte commented Mar 1, 2022

Okay so what I would do:

  • Revert Don't require cargo to build offline queries #1415
  • Change let cargo = env("CARGO").expect("CARGO must be set"); to an if let Ok(cargo) = env("CARGO") {} or similar and make the workspace_root field optional for this to work
  • Add target_dir next to workspace_root and initialize it the same way
  • Make use of target_dir whereever {workspace_root}/target is being used right now (maybe the workspace root doesn't even need to be queried then?)

@sedrik
Copy link
Contributor Author

sedrik commented Jun 16, 2022

I did an attempt at fixing this but it seems to me that it boils down to an issue in the rustc cli (I can't set out-dir in our specific case).

I did ask about it on zulip but haven't received a response yet.

Created a draft PR here with a, in my opinion, quite ugly workaround. Namely moving the files. I did verify that on Linux it works with and without a custom target directory.

#1910

@sedrik
Copy link
Contributor Author

sedrik commented Jun 16, 2022

Here is an example of the error from my debugging session.

[sqlx-cli/src/prepare.rs:154] Command::new(&cargo).arg("rustc").args(cargo_args).arg("--").arg("--out-dir").arg(format!("{}",  
                                metadata.target_directory.join("sqlx").display())).arg("--emit").arg("dep-info,metadata").arg("--cfg").arg(format!("__sqlx_recompile_trigger=\"{}\"",                                                                          
                SystemTime :: UNIX_EPOCH.elapsed()                                                                             
                ?.as_millis())).env("SQLX_OFFLINE",                                                                            
        "false").env("DATABASE_URL", url) = "/home/sedrik/.cargo/bin/cargo" "rustc" "--lib" "--all-features" "--" "--out-dir" "/home/sedrik/.cargo/target/sqlx" "--emit" "dep-info,metadata" "--cfg" "__sqlx_recompile_trigger=\"1655408768682\""              
   Compiling data_collection_backend v2.6.1 (/home/sedrik/thefit/data-collection-backend)                                      
error: Option 'out-dir' given more than once

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

2 participants