【问题标题】:How to make this rails method - windows compatible?如何使这种 rails 方法 - windows 兼容?
【发布时间】:2012-07-31 20:57:31
【问题描述】:

我已经获取了名为 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 (未定义方法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:in normalize_parameters' actionpack (3.2.5) lib/action_dispatch/http/upload.rb:41: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:in normalize_parameters' actionpack (3.2.5) lib/action_dispatch/http/upload.rb:41:innormalize_parameters'

有没有办法让它在 Windows 上工作,或者通过使用 gem,我可以在 Windows 上安装的东西,或者重写文件?

【问题讨论】:

    标签: windows ruby-on-rails-3 unix gem


    【解决方案1】:

    删除或注释掉该行:

    alias_method_chain :initialize, :magic
    

    这将阻止它挂接到 ActionDispatch::HTTP::UploadFile#initialize

    这也意味着您不会获得“证明”内容类型的好处,但我不知道这对您的应用程序是否真的有必要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      相关资源
      最近更新 更多