2013-03-11 4 views
1

open-uri와 seeds.db 파일을 사용하고 있습니다. 그 리디렉션 내 두 번째 구조 문을 인식하지, 어떤 이유여러개의 구조 명령문이 레일스에서 ​​작동하지 않습니다.

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 

내가 명령을 실행할 때마다, 그리고 : "씨 --trace을 레이크 dB"나는 사용하여 다음 코드를 실행하기 위해 노력하고있어

** 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 

내 코드가 리디렉션 오류를 잡기되지 않는 이유 어떤 생각 : 나는 (내가 말을 단축하는) 다음과 같은 출력을 받고 있어요? 어떤 도움을 진심으로 감사드립니다!

답변

0

문제를 발견. 루비 라이브러리에는 open-uri.rb 파일에 대한 패치가 있습니다.
은 교체 :

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

으로 : 오픈 uri.rb 파일에

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

. 문제는 http -> https 리디렉션입니다. 이 파일은 나를 찾았습니다 :

/Users/MyName/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/open-uri.rb 
0

throw되는 오류가 OpenURI::HTTPRedirect 인 것처럼 보이지 않습니다. 트리거지고있는 오류를 확인하려면이 시도 : 오류가 StandardError 인 경우

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

다음 puts e.inspect가 반환 :

#<StandardError: StandardError> 
+0

내가 이것을 시도하면 "보호 된 속성을 대량 지정할 수 없습니다 : inteRst5"라는 아이디어가 있습니까? –

+0

그 오류는 매개 변수': inteRst5'를 사용하여 모델을 저장하려하지만 모델에서'attr_accessible' 메서드를 사용하여 해당 속성을 업데이트 할 수 없다는 것을 의미합니다. – Sam