Как я могу обслуживать файлы c по пути, отличному от пути по умолчанию? - PullRequest
0 голосов
/ 09 марта 2020

Я использую Plug.Stati c для обслуживания файлов c с моего сервера. Способ «по умолчанию» - настроить его следующим образом:

  plug Plug.Static,
    at: "/my_project/assets",
    from: :my_project,
    gzip: true

, и тогда я смогу использовать файлы в priv / stati c в html, используя, например:

<img class='picture' src='<%= static_path(@conn, "/myPicture.png") %>'> 

Пока все хорошо. Однако, если я хочу передать файлы из priv / stati c по другому пути, и я использую

  plug Plug.Static,
    at: "/my_project/another_path/assets",
    from: :my_project,
    gzip: true

Теперь я не могу получить доступ к файлам, используя static_path, поскольку он все еще разрешается в host.com/assets/my-picture-hash вместо host.com/another_path/assets/my-picture-hash, что является предполагаемым поведением.

Как получить фактический путь к хешированному файлу, когда он не отображается в пути по умолчанию?

1 Ответ

0 голосов
/ 10 марта 2020

Вы уверены, что ваш первый пример работает? Я думаю, что конфигурация работает только когда вызывается как static_path(@conn, "/my_project/assets/myPicture.png).

Так что ваш второй пример работает, когда вызывается как static_path(@conn, "/my_project/another_path/assets/myPicture.png")

Похоже, у вас есть :at и :to варианты перепутаны. Это из Plug.Static документов :

:at - пути запроса для доступа к активам stati c. Это должна быть строка.

:from - путь к файловой системе для чтения ресурсов stati c. Это может быть: строка, содержащая путь к файловой системе, атом, представляющий имя приложения (где ресурсы будут обслуживаться с priv/static), или кортеж, содержащий имя приложения и каталог для обслуживания ресурсов (помимо priv/static) ).

Итак, чтобы ответить на заголовок вашего вопроса ( как я могу обслуживать stati c файлы по пути не по умолчанию? ); если вы хотите обслуживать файлы по другому пути, а не по умолчанию priv/static в папке вашего приложения, не должно ли это быть:

plug Plug.Static, at: "/uploads", from: "/some/other/path"

И показывать изображение, расположенное на вашем диске в /some/other/path/myPicture.png (это абсолютный путь, не относящийся к вашему приложению):

<img class="picture" src="<%= static_path(@conn, "/uploads/myPicture.png") %>"> 

(Если это все еще не работает и , вы добавили его как новый Plug.Static после по умолчанию: поместите его до по умолчанию stati c plug.)

Edit:

И, конечно, если вы хотите обслуживать stati c ресурсов из пути по умолчанию (priv/static в папке вашего приложения), но с пользовательским URL вы можете сделать:

plug Plug.Static, at: "/some/path", from: :my_project

и использовать их как:

<img class="picture" src="<%= static_path(@conn, "/some/path/myPicture.png") %>">
...