2015-05-08 2 views
3

Рубин жалуется я не предоставляет достаточно аргументов, чтобы мой сценарий, который:рубин ArgumentError когда на самом деле обеспечивая правильные аргументы

#!/usr/bin/ruby 
require 'mail' 

def send(file,recipients_csv) 
    recipients=recipients_csv.split(",") 
     recipients.each do |recipient| 
     Mail.defaults do 
     delivery_method :smtp,{ :address => 'localhost', :port => 25,:openssl_verify_mode => OpenSSL::SSL::VERIFY_NONE} 
     end 
     mail = Mail.new do 
     from '[email protected]' 
     to "#{recipient}" 
     subject "test" 
     body "test" 
     add_file :filename => "a_testfile.tsv", :content => File.read(file.path) 
     end 
     mail.deliver! 
     end 
end 

testfile=File.new("newfile.tsv","w") 
send(testfile,"[email protected]") 

Что я получить обратно есть:

Mailer.rb:4:in `send': wrong number of arguments (1 for 2) (ArgumentError) 
    from /usr/lib64/ruby/gems/1.9.1/gems/treetop-1.4.15/lib/treetop/runtime/compiled_parser.rb:18:in `parse' 
    from /usr/lib64/ruby/gems/1.9.1/gems/mail-2.5.4/lib/mail/elements/address_list.rb:26:in `initialize' 
    from /usr/lib64/ruby/gems/1.9.1/gems/mail-2.5.4/lib/mail/fields/common/common_address.rb:9:in `new' 

я не получаю это, аргументы, которые я предоставляю, очевидно, 2

ответ

2

Это может противоречить основанию Ruby send. Попробуйте переименовать send в send_mail (или что-то еще), чтобы избежать перезаписи метода send

+0

Спасибо, это действительно было проблемой. Честно говоря, я нахожу это довольно неудобной «особенностью». – JBoy

2

Эта ошибка не возникает, когда вы запускаете скрипт самостоятельно в строке 22, вы явно передаете ему два аргумента. Фактически это происходит из одного из трех файлов, которые вы видите в стеке ошибок.

from /usr/lib64/ruby/gems/1.9.1/gems/treetop-1.4.15/lib/treetop/runtime/compiled_parser.rb:18:in `parse' 
from /usr/lib64/ruby/gems/1.9.1/gems/mail-2.5.4/lib/mail/elements/address_list.rb:26:in `initialize' 
from /usr/lib64/ruby/gems/1.9.1/gems/mail-2.5.4/lib/mail/fields/common/common_address.rb:9:in `new' 

Если вы идете в эти файлы send вызывается только один аргумент, в отличие от двух.

Смежные вопросы