2

Passenger を使用して Ruby on Rails アプリケーションを実行する際に問題があります。私のアプリケーションは /Users/Glutexo/Práce/Bytek/Bytek ディレクトリにあり、(á) 内に非 ASCII 文字が含まれていることがわかります。すべての文字が US-ASCII の /Library/WebServer/Documents/Bytek など、別のディレクトリにシンボリック リンクしても、問題は解決しません。

しかし、/Users/Glutexo/rails/pokus のように、すべての US-ASCII パスに別の Rails アプリケーションを物理的に作成すると、アプリケーションは起動し、Passenger を介して正常に実行されます。

非 ASCII パスに存在する Rails アプリケーションを実行しようとしたときに表示されるエラー ページには、次のように表示されます。

エラーメッセージ:

US-ASCII の無効なバイト シーケンス

例外クラス:

ArgumentError

バックトレース:

0 | /Users/Glutexo/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/パス名.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文字を含むパスからでもRuby on Railsアプリケーションを実行できるようにPassengerを納得させる方法はありますか?

Rails はバージョン 3.2.2、Ruby はバージョン 1.9.3-p125、Apache はバージョン 2.2.21、Passenger はバージョン 3.0.12 です。

助けてくれてありがとう!

4

1 に答える 1

1

この問題の解決策は、Rails アプリのソース ファイルに「マジック コメント」を追加することです。たとえば、ASCII 以外の文字が含まれるファイルの先頭に、次の行を追加します。

# encoding: utf-8

これを行うのに役立つ便利な宝石があります: https://github.com/m-ryan/magic_encoding

この解決策を確認するために、「Práce」を含むディレクトリに Rails アプリを使用してパッセンジャーをセットアップしましたが、同様のエラーが発生しました。Rails アプリのルートで、magic_encoding gem の「magic_encoding」コマンドを実行しました。乗客を再起動しましたが、うまくいったようです。それが役立つことを願っています!

関連項目: Rails および Ruby 1.9 では無効なマルチバイト文字 (US-ASCII)

于 2012-12-05T18:23:57.913 に答える