Class: Turbotlib::FTPDelegator
- Inherits:
-
SimpleDelegator
- Object
- SimpleDelegator
- Turbotlib::FTPDelegator
- Defined in:
- lib/turbotlib/ftp.rb
Instance Method Summary collapse
-
#method_missing(m, *args, &block) ⇒ Object
echanges.dila.gouv.fr sometimes returns a local IP (192.168.30.9) for the host in ‘#makepasv`.
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(m, *args, &block) ⇒ Object
echanges.dila.gouv.fr sometimes returns a local IP (192.168.30.9) for the host in ‘#makepasv`. We can store the first host received (which we assume to be good), and return it every time. However, even with a good IP, the next command times out. So, we instead retry the entire command with a new client, after closing the old client.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/turbotlib/ftp.rb', line 14 def method_missing(m, *args, &block) on_retry = Proc.new do |exception, try, elapsed_time, next_interval| @delegate_sd_obj.error("#{exception.} on #{@delegate_sd_obj.last_cmd}") @delegate_sd_obj.close ftp = FTP.new(*@delegate_sd_obj.initialize_args) ftp.logger = @delegate_sd_obj.logger ftp.root_path = @delegate_sd_obj.root_path ftp.passive = true ftp.login dir = @delegate_sd_obj.last_dir.to_s unless dir.empty? ftp.chdir(dir) end __setobj__(ftp) end exception_classes = [Errno::ETIMEDOUT, EOFError] if Net.const_defined?(:ReadTimeout) # Ruby 2 exception_classes << Net::ReadTimeout end Retriable.retriable(on: exception_classes, on_retry: on_retry) do super end end |