Coder Social home page Coder Social logo

Comments (5)

xintrea avatar xintrea commented on June 6, 2024

Ранее не было необходимости заморачиваться с относительными путями. Как вы себе представляете выбор типа пути в интерфейсе (разрешается фантазировать).

from mytetra_dev.

Alexilmarranen avatar Alexilmarranen commented on June 6, 2024

Если Вы имеете ввиду то, как я вижу выбор относительных путей в интерфейсе - то в этом нет необходимости - путь из абсолютного конвертируется в относительный и пользователю абсолютно не важно что храниться в базе, ведь он в итоге работает в интерфейсе с абсолютными путями.
Если же вопрос про выбор именно типа путей для ссылок, то в интерфейсе это может быть чекбокс "Использовать относительные пути для линков", если данная функция все-таки будет уверенно реализована и протестирована. Первично наверное стоит сделать такой переключатель в виде строки в конфиге (что я и сделал у себя, успешно собрал и протестировал вручную в работе для варианта с преобразованием и хранением относительных путей, которые берутся от директории приложения). Однако такой вариант (с путями, которые относительны от директории приложения) не решает проблемы совместного использования, если само приложение не лежит на разделяемом ресурсе и не запускается всеми пользователями с разделяемого ресурса.

from mytetra_dev.

xintrea avatar xintrea commented on June 6, 2024

Тогда как вам другие варианты:

  1. Добавить в настройки "Префикс для относительных путей". Чтобы была возможность задавать относительные пути не относительно базы, а вообще относительно чего угодно.

  2. Или сделать интеллектуальное преобразование пути "на лету", например через задаваемое регулярное выражение.

  3. Не заморачиваться с путями, а решить проблему на уровне файловой системы и линков на нужные директории.

from mytetra_dev.

Alexilmarranen avatar Alexilmarranen commented on June 6, 2024

Я пока не очень хорошо понимаю архитектуру MyTetra, поэтому мои рассуждения могут быть слегка неверными. Однако вот что я думаю:

  1. Префикс для относительных путей для моего случая (>1 пользователя на ОС Linux) должен полностью решить проблему. В базе таким образом будет храниться путь от какой-либо директории и линки на файлы по этому пути будут работать у всех пользователей. Но для этого необходимо, чтобы пользователь выбрал не сам префикс, а именно "базовую" директорию и директорию, в которой хранятся файлы. Пример:
    разделяемый ресурс - директория с содержимым
    ./share
    ./share/docs
    ./share/mytetra
    ./share/mytetra/data
    ./share/mytetra/trash
    Далее - пользователи user1, user2 и user3. Соответственно для каждого из них пути хранения файлов будут выглядеть например так: /home/user1/share, /home/user2/Documents/share и /usr/share.
    Соответственно где-то в настройках каждый из пользователей задает разделяемую директорию с файлами, на которые в базе есть линки и базовую директорию (предположим это директория data).
    Для пользователя user1 - /home/user1/share/docs для файлов и /home/user1/share/mytetra/data в качестве базовой;
    Для пользователя user2 - /home/user2/Documents/docs для файлов и /home/user2/Documents/mytetra/data в качестве базовой
    Для пользователя user3 - /usr/share/docs для файлов и /usr/share/mytetra/data в качестве базовой. Таким образом для того, чтобы все три пользователя получали доступ к ссылкам на файлы в базе необходимо будет хранить ссылки такого вида: ../docs/file1, ../docs/file2 и т.п. А уже каждый экземпляр программы пользователей будет вычислять для работы полный путь, зная относительный и базовый (в некотором роде префикс).
    Одним словом ключевая мысль - для совместной работы с линками в базе необходимо высчитывать относительный путь между самими файлами и какой-то общей точкой в файловой системе у всех пользователей. Можно конечно дать пользователю возможность выбирать эту общую точку, но вообще-то на роль такой общей точки идеально подходит именно директория data, потому как именно она точно будет присутствовать у всех пользователей, которые работают в базе. Минусы такого подхода - вряд ли получится сделать такое решение кросплатформенным (на мой взгляд, возможно я не прав).
  2. Вариант с регулярным выражением не очень понял. Это относится к технической реализации расчета полного пути из относительного и обратно?
  3. Я попробую этот вариант в своем окружении и напишу позже.

from mytetra_dev.

Alexilmarranen avatar Alexilmarranen commented on June 6, 2024

Я проверил вариант с решением проблемы на уровне файловой системы и созданием симлинков. Действительно, этот вариант работает как надо, если у всех машин, которые разделяют ресурс, имеется симлинк на разделяемый ресурс (или его часть), который хранит те файлы, на которые надо ссылаться в базе. Лично я для такого симлинка выбрал путь в директории /home. Таким образом у пользователей базы, являющейся разделяемым ресурсом, осталось два ограничения:

  1. Указывать путь до файла необходимо через симлинк;
  2. Работает такой способ только для *nix.

Лично для меня проблема полностью решена (если не всплывет каких-то других обстоятельств в процессе использования). Если вы считаете, что более нативная реализация в MyTetra не требуется, то issue наверное можно закрывать. Спасибо за идею, не понимаю как я сам не догадался %)

from mytetra_dev.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.