0

socialstream という gem の最新のコード ベースを入手しましたが、Windows マシンでのファイルのアップロードに問題があることに気付きました。問題は以下のコードにあるようです...

# Monkey patches to Ruby on Rails
#
# Use unix file util to prove the content type sent by the browser
class ActionDispatch::Http::UploadedFile
  def initialize_with_magic(*args, &block)
    initialize_without_magic(*args, &block)

    if (unix_file = `which file`.chomp).present? && File.exists?(unix_file)
      `#{ unix_file } -v 2>&1` =~ /^file-(.*)$/
      version = $1

      @content_type =
        if version >= "4.24"
          `#{ unix_file } -b --mime-type #{ @tempfile.path }`.chomp
        else
          `#{ unix_file } -bi #{ @tempfile.path }`.chomp =~ /(\w*\/[\w+-\.]*)/
          $1
        end
    end
  end

  alias_method_chain :initialize, :magic
end

エラーは次のとおりです

NoMethodError (undefined method chomp' for nil:NilClass): social_stream-base (0.22.0) lib/rails/social_stream.rb:8:ininitialize_with_magic' actionpack (3.2.5) lib/action_dispatch/http/upload.rb:39:in new' actionpack (3.2.5) lib/action_dispatch/http/upload.rb:39:innormalize_parameters' actionpack (3.2.5) lib/action_dispatch/http/parameters.rb:73:in block in normalize_parameters' actionpack (3.2.5) lib/action_dispatch/http/parameters.rb:73:ineach' actionpack ( 3.2.5) lib/action_dispatch/http/parameters.rb:73: normalize_parameters' actionpack (3.2.5) lib/action_dispatch/http/upload.rb:41:innormalize_parameters のアクションパック内 (3.2.5) lib/action_dispatch/http/parameters.rb:73:block in normalize_parameters' actionpack (3.2.5) lib/action_dispatch/http/parameters.rb:73:in各アクションパック内 (3.2.5) lib/action_dispatch/ http/parameters.rb:73:in normalize_parameters' actionpack (3.2.5) lib/action_dispatch/http/upload.rb:41:innormalize_parameters'

ジェムを使用するか、Windowsにインストールできるものを使用するか、ファイルを書き換えることにより、これをWindowsで機能させる方法はありますか?

4

1 に答える 1

1

次の行を削除するかコメントアウトします。

alias_method_chain :initialize, :magic

これにより、ActionDispatch::HTTP::UploadFile#initialize へのフックが停止します。

これはまた、コンテンツ タイプを「証明」するメリットが得られないことを意味しますが、それがアプリケーションにとって本当に必要かどうかはわかりません。

于 2012-07-31T21:17:00.690 に答える