Ruby on rails RubyonRails应用程序赢得’;当应用程序路径中有非ASCII字符时,t开始使用Passenger

Ruby on rails RubyonRails应用程序赢得’;当应用程序路径中有非ASCII字符时,t开始使用Passenger,ruby-on-rails,deployment,passenger,non-ascii-characters,Ruby On Rails,Deployment,Passenger,Non Ascii Characters,使用Passenger运行RubyonRails应用程序时遇到问题。我的应用程序驻留在/Users/glutxo/Práce/Bytek/Bytek目录中,您可以看到该目录在(á)中有一个非ASCII字符。即使我将它符号链接到另一个目录,例如/Library/WebServer/Documents/Bytek,所有字符都是US-ASCII,问题仍然存在 但是,当我在所有US-ASCII路径中物理地创建另一个Rails应用程序时,比如/Users/glutxo/Rails/pokus,它就可以工作

使用Passenger运行RubyonRails应用程序时遇到问题。我的应用程序驻留在/Users/glutxo/Práce/Bytek/Bytek目录中,您可以看到该目录在(á)中有一个非ASCII字符。即使我将它符号链接到另一个目录,例如/Library/WebServer/Documents/Bytek,所有字符都是US-ASCII,问题仍然存在

但是,当我在所有US-ASCII路径中物理地创建另一个Rails应用程序时,比如/Users/glutxo/Rails/pokus,它就可以工作了:应用程序通过passer启动并正常运行

尝试运行驻留在非ASCII路径中的Rails应用程序时,我得到的错误页面显示以下内容:

错误消息:

US-ASCII中的字节序列无效

例外类别:

论证错误

回溯:

“=~”中的0 |/Users/glutxo/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/pathname.rb | 45 |

pathname.rb中提到的行位于以下函数中:

# chop_basename(path) -> [pre-basename, basename] or nil
def chop_basename(path)
  base = File.basename(path)
  if /\A#{SEPARATOR_PAT}?\z/o =~ base # This is the line no. 45
    return nil
  else
    return path[0, path.rindex(base)], base
  end
end
private :chop_basename
有人有什么建议吗?如何说服乘客即使从包含非ASCII字符的路径运行RubyonRails应用程序

Rails是版本3.2.2,Ruby是版本1.9.3-p125,Apache是版本2.2.21,Passenger是版本3.0.12


提前感谢您的帮助

解决此问题的方法是在rails应用程序源文件中添加一条“神奇注释”。例如,在遇到非ascii字符的文件开头,添加以下内容:

# encoding: utf-8
有一个有用的宝石可以帮助您做到这一点:

为了确认这个解决方案,我在一个包含“Práce”的目录中安装了一个rails应用程序,并得到了一个类似的错误。我在rails应用程序的根目录下运行了magic_encoding gem的“magic_encoding”命令。我重新启动了乘客,它似乎成功了。希望有帮助

另见: