我在使用 Passenger 运行 Ruby on Rails 应用程序时遇到问题。我的应用程序位于 /Users/Glutexo/Práce/Bytek/Bytek 目录中,您可以看到 (á) 中有一个非 ASCII 字符。即使我将其符号链接到另一个目录,例如/Library/WebServer/Documents/Bytek 所有字符均为 US-ASCII,问题仍然存在。
但是,当我在所有 US-ASCII 路径中物理创建另一个 Rails 应用程序(例如 /Users/Glutexo/rails/pokus)时,它可以工作:应用程序通过 Passenger 启动并正常运行。
当尝试运行驻留在非 ASCII 路径中的 Rails 应用程序时,我收到的错误页面显示以下内容:
错误信息:
US-ASCII 中的无效字节序列
异常类:
参数错误
回溯:
0 | /Users/Glutexo/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/pathname.rb| 45 | 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
有没有人有任何建议,如何说服 Passenger 即使从包含非 ASCII 字符的路径也能够运行 Ruby on Rails 应用程序?
Rails 版本为 3.2.2,Ruby 版本为 1.9.3-p125,Apache 版本为 2.2.21,Passenger 版本为 3.0.12。
预先感谢您的任何帮助!
此问题的解决方案是在 Rails 应用程序源文件中添加“神奇注释”。例如,在遇到非 ASCII 字符的文件开头,添加以下内容:
# encoding: utf-8
有一个有用的宝石可以帮助您做到这一点:https://github.com/m-ryan/magic_encoding https://github.com/m-ryan/magic_encoding
为了确认这个解决方案,我在包含“Práce”的目录中设置了乘客与 Rails 应用程序,并得到了与您类似的错误。我在 Rails 应用程序的根目录中运行 magic_encoding gem 的“magic_encoding”命令。我重新启动了乘客,它似乎已经成功了。希望有帮助!
也可以看看:Rails 和 Ruby 1.9 中的无效多字节字符 (US-ASCII) https://stackoverflow.com/questions/1739836/invalid-multibyte-char-us-ascii-with-rails-and-ruby-1-9
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)