Возможная проблема с WAFileMetadataLibrary

Я использовал WAFileMetadataLibrary и обнаружил возможную проблему с

addFileAt: aPath relativeToRootDirectory: relativeRootDirectory.

Проблема, с которой я столкнулся, заключается в том, что некоторые css с (../img/someImage.png) указывали на

http://localhost:8080/files/img/someImage.png

скорее, чем

http://localhost:8080/files/MyWAFileMetadataLibrary/img/someImage.png

при дальнейшем изучении кода я обнаружил, что в addFileAt: aPathrelativeToRootDirectory:relativeRootDirectory.

есть линия

relativeFilepath := relativeFilepath replaceAll: pathSeparator  with:'/'. 

здесь я обнаружил, что путь с '\' (im in windows) не будет заменен на '/'.

поэтому мне пришлось переопределить и изменить строку на

relativeFilepath := relativeFilepath replaceAll: pathSeparator first with: $/.

который работал для меня, и вызовы из css указывались на

http://localhost:8080/files/MyWAFileMetadataLibrary/img/someImage.png.

Может кто-нибудь в сообществе, пожалуйста, проверьте это и дайте мне знать, если я еще больше не испорчу вещи, и если все в порядке, пожалуйста, не могли бы вы соответствующим образом исправить WAFileMetadaLibrary?


person Thushar G R    schedule 29.06.2013    source источник


Ответы (1)


Я только что проверил и в Seaside 30, и в Seaside 3.1 (используя сервер Pharo CI https://ci.inria.fr/pharo-contribution/).

В Seaside 3.1 код такой

addFileAt: aPath relativeToRootDirectory: relativeRootDirectory
| relativeFilepath pathSeparator |
relativeFilepath := aPath allButFirst: relativeRootDirectory size.
pathSeparator := GRPlatform current pathSeparator.

(relativeFilepath first = pathSeparator first) 
    ifTrue: [ relativeFilepath := relativeFilepath allButFirst ].

relativeFilepath := relativeFilepath replaceAll: pathSeparator first with: $/. 

self addFileNamed: relativeFilepath
    contents: (GRPlatform current 
            contentsOfFile: aPath
            binary: (self isBinaryAt: aPath))

Ваше исправление выглядит хорошо.

И действительно в Приморском 30

 relativeFilepath := relativeFilepath replaceAll: pathSeparator first with: '/'. 

Итак, вы, вероятно, нашли ошибку.

person Stephane Ducasse    schedule 30.06.2013