2

我正在使用 open-uri 和 seed.db 文件。我正在尝试使用“rake db:seed --trace”运行以下代码:

CSV.foreach("vendor/users1.csv", { :col_sep => ",",  :quote_char => "\"", :headers => true}) do |row|

user = User.find_by_email("sample#{i}@foobardne.com")

    if (!user.picture_url.nil?)
        begin
            file = open user.picture_url
            user.avatar = file
        rescue OpenURI::HTTPError => error
            user.avatar = nil
        rescue OpenURI::HTTPRedirect => redirect
            user.avatar = nil
        end
            user.password = user.password_confirmation = "foobar"
            user.save
    end

出于某种原因,每次我运行命令时,它都无法识别我的第二个重定向救援语句,并且我得到以下输出(我缩短了结尾):

** Invoke db:seed (first_time)
** Execute db:seed
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:abort_if_pending_migrations
rake aborted!
redirection forbidden:     http://cellbio.med.harvard.edu/faculty/artavanis/images/artavanis4_2002.jpg -> https://cellbio.med.harvard.edu/faculty/artavanis/images/artavanis4_2002.jpg

知道为什么我的代码没有捕捉到重定向错误吗?任何帮助都非常感谢!

4

2 回答 2

0

看起来抛出的错误不是OpenURI::HTTPRedirect. 试试这个来检查哪个错误被触发:

begin
  ...
rescue => e
  puts e.inspect
end

如果错误,StandardError那么puts e.inspect将返回:

#<StandardError: StandardError>
于 2013-03-11T22:32:21.780 回答
0

发现了问题。ruby 库中的 open-uri.rb 文件有一个补丁。
代替:

(/\A(?:http|ftp)\z/i =~ uri1.scheme && /\A(?:http|ftp)\z/i =~ uri2.scheme)

和:

(/\A(?:https?|ftp)\z/i =~ uri1.scheme && /\A(?:https?|ftp)\z/i =~ uri2.scheme)

在 open-uri.rb 文件中。问题在于 http -> https 重定向。这个文件是为我找到的:

/Users/MyName/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/open-uri.rb
于 2013-03-12T02:50:01.130 回答