wimleers / fileconveyor

File Conveyor is a daemon written in Python to detect, process and sync files. In particular, it's designed to sync files to CDNs. Amazon S3 and Rackspace Cloud Files, as well as any Origin Pull or (S)FTP Push CDN, are supported. Originally written for my bachelor thesis at Hasselt University in Belgium.
https://wimleers.com/fileconveyor
The Unlicense
341 stars 95 forks source link

The transporter module 'sftp' could not be found. Tried (sftp, transporters.transporter_sftp) #163

Open kennywyland opened 10 years ago

kennywyland commented 10 years ago
<servers>
    <server name="sftp push frontend" transporter="sftp" maxConnections="5">
        <host>xxx.xxx.xxx.xxx</host>
        <username>root</username>
        <url>http://xxx.xxx.xxx.xxx/</url>
    </server>
</servers>

# python /root/fileconveyor/fileconveyor/arbitrator.py 
/root/fileconveyor/fileconveyor/filter.py:10: DeprecationWarning: the sets module is deprecated
  from sets import Set, ImmutableSet
2014-01-23 00:07:46,331 - Arbitrator                - WARNING  - File Conveyor is initializing.
2014-01-23 00:07:46,337 - Arbitrator                - WARNING  - Loaded config file.
2014-01-23 00:07:46,340 - Arbitrator                - ERROR    - The transporter module 'sftp' could not be found. Tried (sftp, transporters.transporter_sftp)
TransporterAvailabilityTestError Consult the log file for details

The files in the fileconveyor directories are all owned and grouped by root (and I am logged in as root), they are 644 (although I also tried 755 just in case there was an executable issue with the subdirectories).

I don't understand why it isn't finding the transporter_sftp.py module. I've looked through other issues with this same error, but none of their fixes work for me.

I installed using:

pip install -e git+https://github.com/wimleers/fileconveyor@master#egg=fileconveyor

kennywyland commented 10 years ago

I was able to use the symlink_or_copy transporter, but still not able to use the sftp transporter.

kennywyland commented 10 years ago

I'm an experienced dev, but I know nothing about python, django, etc. However, it looks to me like the transporter_sftp simply doesn't work at all with the current version of SFTPStorage.

I was able to get the sftp transporter recognized after I yum installed python-paramiko, and then the next error message I received was that the SFTPStorage init method expects only 1 param, but 4 were given. I dug into the SFTPStorage code and it looks like it grabs all of its configuration variables from a class called django.conf.settings, but that's not at all how the sftp transporter expects to be sending those variables.

Traceback (most recent call last):
  File "/root/src/fileconveyor/fileconveyor/arbitrator.py", line 1185, in <module>
    run_file_conveyor()
  File "/root/src/fileconveyor/fileconveyor/arbitrator.py", line 1168, in run_file_conveyor
    arbitrator = Arbitrator(os.path.join(FILE_CONVEYOR_PATH, "config.xml"), restart)
  File "/root/src/fileconveyor/fileconveyor/arbitrator.py", line 151, in __init__
    transporter = self.__create_transporter(server)
  File "/root/src/fileconveyor/fileconveyor/arbitrator.py", line 928, in __create_transporter
    transporter = transporter_class(settings, self.transporter_callback, self.transporter_error_callback, "Arbitrator")
  File "/root/src/fileconveyor/fileconveyor/transporters/transporter_sftp.py", line 35, in __init__
    self.storage = SFTPStorage(location, self.settings["url"], key)
TypeError: __init__() takes exactly 1 argument (4 given)