f0rest8

f0rest8

Probably silly question with file or paths deploying to Fly.io

Where is the server’s priv folder on Fly? I’m having trouble finding a file that I hope is being copied correctly during deployment.

For more context, for Metamorphic’s passphrase generator it uses the eff_large_wordlist.txt and subsequent strategy.

The GenServer for this is started in the Application:

...
# Start the word retrieval GenServer API for password generator.
{Metamorphic.Extensions.PasswordGenerator.WordRepository, %{}},
...

Then, there’s a WordLoader file that calls:

# I've also used Application.app_dir(@otp_app, "/priv/dict/eff_large_wordlist.txt") 
# with success locally.
@word_list_contents File.stream!(
  Path.join(:code.priv_dir(@otp_app), "/dict/eff_large_wordlist.txt")
)

This worked great in deployment with Render and locally. When deploying to Fly I run into the enoent error and that it was looking for the file at /app/_build/prod/lib/<@otp_app>/priv/dict/eff_large_wordlist.txt.

In the Docker file it runs the command COPY priv priv.

My local file structure root priv directory looks like /home/user/github/name/priv.

I’m not super familiar with Docker, but my understanding is that COPY priv priv is copying all the files in my priv folder over to a priv folder for the server on Fly. Is it copying the folder structure? I’ve used both Application.app_dir/2 and :code.priv_dir/1 and both work except for deployment to Fly (which my thinking is because I’m either not copying the file over and/or not finding it correctly).

Thanks for any help :blush:

Marked As Solved

tj0

tj0

So in my production deploy, it is in:

/app/lib/my_app-1.0/priv

The rest of libraries also have a priv directory.

I’m accessing that directory via:

app = Mix.Project.config[:app]
path = :filename.join(:code.priv_dir(unquote(app)), 'the_file')

It seems you’ve already tried these though, so I’m not sure exactly what you’re missing.

I’d suggest logging in via ssh and checking if the file exists on disk.

$ fly ssh console -a your_app
``

Also Liked

LostKobrakai

LostKobrakai

Make sure you run that code at runtime and not compile time.

f0rest8

f0rest8

Thank you! I should have ssh’d in and checked. That revealed that it was in the same location as yours.

/app/lib/my_app-version/priv/dict/eff_large_wordlist.txt

This works for me:

 otp_app = Mix.Project.config()[:app]
 version = Mix.Project.config()[:version]

  if Mix.env() in [:prod] do
    @word_list_contents File.stream!(
       "/app/lib/#{otp_app}-#{version}/priv/dict/eff_large_wordlist.txt"
    )
  else
    @word_list_contents File.stream!(
      Path.join(:code.priv_dir(otp_app), "/dict/eff_large_wordlist.txt")
    )
  end
tj0

tj0

The docker file is using mix release by default and it works for me, so I don’t think it’s that. Anyway, definitely an odd one.

f0rest8

f0rest8

Yea thanks! I did a quick test and deployed to Fly with this and it works:

@otp_app Mix.Project.config()[:app]

def load_words do
  File.stream!(Path.join(:code.priv_dir(@otp_app), "/dict/eff_large_wordlist.txt"))
  ...
end

Whereas before I was setting that as an attribute constant:

...
@word_list_contents File.stream!(Path.join(:code.priv_dir(@otp_app), "/dict/eff_large_wordlist.txt"))

def load_words do
  word_list_contents
  ...
end

So, as I’m understanding, when building for the Fly release it compiles the attribute @word_list_contents and then returning the wrong file path of /app/_build/.... I didn’t realize that because when deploying to Render I think it was compiled locally and then sent up (because I never ran into this issue on Render)?

Where Next?

Popular in Questions Top

itssasanka
Hi all, Trying to get some more clarity over utc_datetime and naive_datetime for Ecto: https://hexdocs.pm/ecto/Ecto.Schema.html#module-...
New
sergio_101
I am VERY much an elixir newbie. I have taken one elixir course and one phoenix course on Udemy. During that course, I saw the instructor...
New
New
Kagamiiiii
Student &amp; New to elixir. Nice language. I want to convert a english character, e.g. “a”, which is stored in a variable, to it’s asci...
New
hariharasudhan94
I would like to know what is the best IDE for elixir development?
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
ovidiubadita
Hey all, I discovered Elixir and I love it. I always wanted to learn a functional programming and I intended to go for Haskell, but afte...
New
belgoros
I’m not a pro in using Regex and can’t figure out why the following behaviour happens, especially if we take into account the difference ...
New
wernerlaude
In AR this is so simple @articles = current_user.articles How to do in Ecto? def index(conn, _params) do current_user = conn.assig...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New

Other popular topics Top

peerreynders
Manning 2016 Halloween weekend sale via Deal of the Day Friday, October 28 - Half off all MEAPs - code WM102816LT Saturday, October 29 ...
326 29600 154
New
dotdotdotPaul
Okay, I'm having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I'm sure I'...
New
AstonJ
You’re a programmer, so you don’t need spoon feeding with the conventional drivel about “this is an integer.” No. You need to know what’s...
New
malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
New
lastday4you
I wanted to check elixir version in phoenix because i found that my elixir is 1.5 but when i use Enum.chunk_by it said the function is un...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers' Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
AstonJ
by Lance Halvorsen Elixir and Phoenix are generating tremendous excitement as an unbeatable platform for building modern web application...
460 27162 124
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New

We're in Beta

About us Mission Statement