fireproofsocks

fireproofsocks

Serving only specific static assets

I’m wading through my app’s endpoint.ex – I want to only expose several hand-selected static assets in my Phoenix app, but I can’t seem to find the magic way to do it.

This doesn’t seem to work:

plug Plug.Static,
    at: "/",
    from: {:myapp, "priv/static"},
    only: ["xyz/some_file.json"]

http://localhost:4000/xyz/some_file.json - 404

Nor does this:

plug Plug.Static,
    at: "/",
    from: {:myapp, "priv/static/xyz"},
    only: ["some_file.json"]

http://localhost:4000/xyz/some_file.json - 404

If I open up the restrictions a bit, it does, e.g.

plug Plug.Static,
    at: "/",
    from: {:myapp, "priv/static"},
    only: ~w(xyz)

http://localhost:4000/xyz/some_file.json - OK!

First Post!

NobbZ

NobbZ

Thats not xyz/some_file.json, as far as I understand, :only matches from the beginning of the string.

http://localhost:4000/some_file.json would probably work (after moving the file there).

Most Liked

konstantine

konstantine

My understanding is that there are 2 options:

:only, it will match exact file and folder names at the :at location (“/” in your case)

:only_matching, which works similarly, but allows for random filename ‘tails’ (this is useful when serving digested files)

With reference to your 3 examples, the first :only specifies a path rather than a name, the second a name that is not at the :at location, the third one works because xyz is right at the :at location (and the filename does not matter after that).

Assuming that my understanding is correct, you have two possibilities. Either you place your hand-selected assets in specific folders, whose names you specify, together with any files located at the root, in a single :only or :only_matching word list. Or, if you want to hand-select from various folders, you will need multiple plugs and multiple :at locations, each with its very own word list.

Last Post!

fireproofsocks

fireproofsocks

That sounds correct. I think my struggle stems from my attempts to include different files in different directories… the examples don’t have that… and I’m not even sure how to include static assets from 2 different directories…

Where Next?

Popular in Questions Top

mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
Darmani72
If I have a post route which an argument: post /my_post_route/:my_param1, MyController.my_post_handler How would get the post params ...
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
komlanvi
Hi everyone, I was playing with phoenix liveView but I run into an issue. I have a form and want to validate each input text when the te...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
svb
Hi! Currently I want to submit a form by pressing the Enter key. However, since my input field is of type “textarea” this is just adds a...
New

Other popular topics Top

rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers’ Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
New
dokuzbir
I want to highlight html closing tags when i click a html tag. That works in .html files but doesnt work for html.eex templates. How can...
New
WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
sergio
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New

We're in Beta

About us Mission Statement