使用 OpenProject 一個月中,團隊逐漸開始作任務管理、缺陷管理和工時管理,接下來要將內部文檔用 Wiki 管理。app
我試着在 Wiki 寫了份 PRD,文中引用的圖片是中文文件名,遇到了兩個問題url
引用處沒法顯示日誌
點擊文末的連接提示 500 系統錯誤code
I, [2015-12-23T12:50:50.886339 #21693] INFO -- : Started GET "/attachments/37" for 116.226.86.102 at 2015-12-23 12:50:50 +0800 I, [2015-12-23T12:50:50.889672 #21693] INFO -- : Processing by AttachmentsController#download as HTML I, [2015-12-23T12:50:50.889744 #21693] INFO -- : Parameters: {"id"=>"37"} I, [2015-12-23T12:50:50.904787 #21693] INFO -- : OpenProject User: Jonathan Gu (jonathan.gu@jiaj.com.cn ID: 3 <jonathan.gu@jiaj.com.cn>) I, [2015-12-23T12:50:50.923084 #21693] INFO -- : Completed 500 Internal Server Error in 33ms (ActiveRecord: 19.9ms) F, [2015-12-23T12:50:50.924275 #21693] FATAL -- : URI::InvalidURIError (bad URI(is not URI?): /opt/openproject/files/attachment/file/37/02_分享效果圖.png): app/models/attachment.rb:62:in `external_url' app/controllers/attachments_controller.rb:36:in `download' app/middleware/params_parser_with_exclusion.rb:40:in `call' I, [2015-12-23T12:50:58.442689 #21693] INFO -- : Started GET "/attachments/37/02_%e5%88%86%e4%ba%ab%e6%95%88%e6%9e%9c%e5%9b%be.png" for 116.226.86.102 at 2015-12-23 12:50:58 +0800 I, [2015-12-23T12:50:58.446375 #21693] INFO -- : Processing by AttachmentsController#download as HTML I, [2015-12-23T12:50:58.446447 #21693] INFO -- : Parameters: {"id"=>"37", "filename"=>"02_分享效果圖.png"} I, [2015-12-23T12:50:58.461368 #21693] INFO -- : OpenProject User: Jonathan Gu (jonathan.gu@jiaj.com.cn ID: 3 <jonathan.gu@jiaj.com.cn>) I, [2015-12-23T12:50:58.478570 #21693] INFO -- : Completed 500 Internal Server Error in 32ms (ActiveRecord: 18.4ms) F, [2015-12-23T12:50:58.479710 #21693] FATAL -- : URI::InvalidURIError (bad URI(is not URI?): /opt/openproject/files/attachment/file/37/02_分享效果圖.png): app/models/attachment.rb:62:in `external_url' app/controllers/attachments_controller.rb:36:in `download' app/middleware/params_parser_with_exclusion.rb:40:in `call'
根據錯誤提示,找到 app/models/attachement.rb
文件,確保 URI.parse
前使用 URI.escape
轉義。blog
def external_url url = URI.parse file.download_url # returns a path if local url if url.host end
def external_url escaped_url = URI.escape file.download_url url = URI.parse escaped_url # returns a path if local url if url.host end