rest-ftp-daemon 0.222.0 → 0.230.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile.lock +47 -20
- data/README.md +160 -94
- data/Rakefile +7 -1
- data/bin/rest-ftp-daemon +22 -3
- data/lib/rest-ftp-daemon.rb +25 -21
- data/lib/rest-ftp-daemon/constants.rb +19 -5
- data/lib/rest-ftp-daemon/exceptions.rb +2 -1
- data/lib/rest-ftp-daemon/helpers.rb +10 -5
- data/lib/rest-ftp-daemon/job.rb +181 -304
- data/lib/rest-ftp-daemon/job_queue.rb +5 -3
- data/lib/rest-ftp-daemon/logger.rb +4 -3
- data/lib/rest-ftp-daemon/logger_helper.rb +14 -10
- data/lib/rest-ftp-daemon/notification.rb +54 -43
- data/lib/rest-ftp-daemon/paginate.rb +2 -2
- data/lib/rest-ftp-daemon/path.rb +43 -0
- data/lib/rest-ftp-daemon/remote.rb +57 -0
- data/lib/rest-ftp-daemon/remote_ftp.rb +141 -0
- data/lib/rest-ftp-daemon/remote_sftp.rb +160 -0
- data/lib/rest-ftp-daemon/uri.rb +11 -4
- data/lib/rest-ftp-daemon/views/dashboard_table.haml +1 -1
- data/lib/rest-ftp-daemon/views/dashboard_workers.haml +1 -1
- data/lib/rest-ftp-daemon/worker.rb +10 -2
- data/lib/rest-ftp-daemon/worker_conchita.rb +12 -6
- data/lib/rest-ftp-daemon/worker_job.rb +8 -11
- data/rest-ftp-daemon.gemspec +6 -1
- data/rest-ftp-daemon.yml.sample +4 -2
- data/spec/rest-ftp-daemon/features/dashboard_spec.rb +8 -4
- data/spec/rest-ftp-daemon/features/jobs_spec.rb +68 -0
- data/spec/rest-ftp-daemon/features/routes_spec.rb +20 -0
- data/spec/rest-ftp-daemon/features/status_spec.rb +19 -0
- data/spec/spec_helper.rb +6 -2
- data/spec/support/config.yml +0 -1
- data/spec/support/request_helpers.rb +22 -0
- metadata +53 -3
- data/.ruby-version +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 77ab7d0648a235291fd5cd1f3c0682dc5296d8f7
|
4
|
+
data.tar.gz: cfa1db6e26b429e8228b11e65a127774fa270957
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10059f2656187713a533efa90dbc3100f6092194d97d11d7e95e4ffa9b1dc0ab6a4147f666496d8cf4acdc190526e7d4c828fc90803b0f1488d931fd02110cbb
|
7
|
+
data.tar.gz: a0d91e6e6d468c1c693e69b4b8fdfc3de62e70e41646543da9d2a5f3cc63f36599a8d7e5cfce151c8efdfb48d8d18221bc70b271b8fdc9cce71c6c991cee76e6
|
data/.gitignore
CHANGED
data/CODE_OF_CONDUCT.md
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# Contributor Code of Conduct
|
2
|
+
|
3
|
+
As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
|
4
|
+
|
5
|
+
We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, age, or religion.
|
6
|
+
|
7
|
+
Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.
|
8
|
+
|
9
|
+
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team.
|
10
|
+
|
11
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.
|
12
|
+
|
13
|
+
This Code of Conduct is adapted from the [Contributor Covenant](http:contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/)
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rest-ftp-daemon (0.
|
4
|
+
rest-ftp-daemon (0.230.0)
|
5
5
|
double-bag-ftps
|
6
6
|
facter
|
7
7
|
get_process_mem
|
@@ -9,6 +9,7 @@ PATH
|
|
9
9
|
grape-entity
|
10
10
|
haml
|
11
11
|
json
|
12
|
+
net-sftp
|
12
13
|
newrelic_rpm
|
13
14
|
settingslogic
|
14
15
|
sys-cpu
|
@@ -19,21 +20,25 @@ GEM
|
|
19
20
|
remote: http://rubygems.org/
|
20
21
|
specs:
|
21
22
|
CFPropertyList (2.2.8)
|
22
|
-
activesupport (4.2.
|
23
|
+
activesupport (4.2.3)
|
23
24
|
i18n (~> 0.7)
|
24
25
|
json (~> 1.7, >= 1.7.7)
|
25
26
|
minitest (~> 5.1)
|
26
27
|
thread_safe (~> 0.3, >= 0.3.4)
|
27
28
|
tzinfo (~> 1.1)
|
28
29
|
addressable (2.3.8)
|
30
|
+
ast (2.0.0)
|
31
|
+
astrolabe (1.3.0)
|
32
|
+
parser (>= 2.2.0.pre.3, < 3.0)
|
29
33
|
axiom-types (0.1.1)
|
30
34
|
descendants_tracker (~> 0.0.4)
|
31
35
|
ice_nine (~> 0.11.0)
|
32
36
|
thread_safe (~> 0.3, >= 0.3.1)
|
33
37
|
builder (3.2.2)
|
38
|
+
coderay (1.1.0)
|
34
39
|
coercible (1.0.0)
|
35
40
|
descendants_tracker (~> 0.0.1)
|
36
|
-
daemons (1.2.
|
41
|
+
daemons (1.2.3)
|
37
42
|
descendants_tracker (0.0.4)
|
38
43
|
thread_safe (~> 0.3, >= 0.3.1)
|
39
44
|
diff-lcs (1.2.5)
|
@@ -44,9 +49,9 @@ GEM
|
|
44
49
|
eventmachine (1.0.7)
|
45
50
|
facter (2.4.4)
|
46
51
|
CFPropertyList (~> 2.2.6)
|
47
|
-
ffi (1.9.
|
52
|
+
ffi (1.9.10)
|
48
53
|
get_process_mem (0.2.0)
|
49
|
-
grape (0.
|
54
|
+
grape (0.12.0)
|
50
55
|
activesupport
|
51
56
|
builder
|
52
57
|
hashie (>= 2.1.0)
|
@@ -61,7 +66,7 @@ GEM
|
|
61
66
|
multi_json (>= 1.3.2)
|
62
67
|
haml (4.0.6)
|
63
68
|
tilt
|
64
|
-
hashie (3.4.
|
69
|
+
hashie (3.4.2)
|
65
70
|
http (0.8.12)
|
66
71
|
addressable (~> 2.3)
|
67
72
|
http-cookie (~> 1.0)
|
@@ -74,30 +79,50 @@ GEM
|
|
74
79
|
i18n (0.7.0)
|
75
80
|
ice_nine (0.11.1)
|
76
81
|
json (1.8.3)
|
82
|
+
method_source (0.8.2)
|
77
83
|
minitest (5.7.0)
|
78
|
-
multi_json (1.11.
|
84
|
+
multi_json (1.11.2)
|
79
85
|
multi_xml (0.5.5)
|
80
|
-
|
81
|
-
|
86
|
+
net-sftp (2.1.2)
|
87
|
+
net-ssh (>= 2.6.5)
|
88
|
+
net-ssh (2.9.2)
|
89
|
+
newrelic_rpm (3.12.1.298)
|
90
|
+
parser (2.3.0.pre.2)
|
91
|
+
ast (>= 1.1, < 3.0)
|
92
|
+
powerpack (0.1.1)
|
93
|
+
pry (0.10.1)
|
94
|
+
coderay (~> 1.1.0)
|
95
|
+
method_source (~> 0.8.1)
|
96
|
+
slop (~> 3.4)
|
97
|
+
rack (1.6.4)
|
82
98
|
rack-accept (0.4.5)
|
83
99
|
rack (>= 0.4)
|
84
100
|
rack-mount (0.8.3)
|
85
101
|
rack (>= 1.0.0)
|
102
|
+
rainbow (2.0.0)
|
86
103
|
rake (10.4.2)
|
87
|
-
rspec (3.
|
88
|
-
rspec-core (~> 3.
|
89
|
-
rspec-expectations (~> 3.
|
90
|
-
rspec-mocks (~> 3.
|
91
|
-
rspec-core (3.
|
92
|
-
rspec-support (~> 3.
|
93
|
-
rspec-expectations (3.
|
104
|
+
rspec (3.3.0)
|
105
|
+
rspec-core (~> 3.3.0)
|
106
|
+
rspec-expectations (~> 3.3.0)
|
107
|
+
rspec-mocks (~> 3.3.0)
|
108
|
+
rspec-core (3.3.1)
|
109
|
+
rspec-support (~> 3.3.0)
|
110
|
+
rspec-expectations (3.3.0)
|
94
111
|
diff-lcs (>= 1.2.0, < 2.0)
|
95
|
-
rspec-support (~> 3.
|
96
|
-
rspec-mocks (3.
|
112
|
+
rspec-support (~> 3.3.0)
|
113
|
+
rspec-mocks (3.3.1)
|
97
114
|
diff-lcs (>= 1.2.0, < 2.0)
|
98
|
-
rspec-support (~> 3.
|
99
|
-
rspec-support (3.
|
115
|
+
rspec-support (~> 3.3.0)
|
116
|
+
rspec-support (3.3.0)
|
117
|
+
rubocop (0.32.1)
|
118
|
+
astrolabe (~> 1.3)
|
119
|
+
parser (>= 2.2.2.5, < 3.0)
|
120
|
+
powerpack (~> 0.1)
|
121
|
+
rainbow (>= 1.99.1, < 3.0)
|
122
|
+
ruby-progressbar (~> 1.4)
|
123
|
+
ruby-progressbar (1.7.5)
|
100
124
|
settingslogic (2.0.9)
|
125
|
+
slop (3.6.0)
|
101
126
|
sys-cpu (0.7.1)
|
102
127
|
ffi (>= 1.0.0)
|
103
128
|
thin (1.6.3)
|
@@ -126,6 +151,8 @@ PLATFORMS
|
|
126
151
|
DEPENDENCIES
|
127
152
|
bundler (~> 1.6)
|
128
153
|
http (~> 0.8)
|
154
|
+
pry
|
129
155
|
rake
|
130
156
|
rest-ftp-daemon!
|
131
157
|
rspec (~> 3.1)
|
158
|
+
rubocop (~> 0.32.0)
|
data/README.md
CHANGED
@@ -6,11 +6,12 @@ rest-ftp-daemon
|
|
6
6
|
[![Test Coverage](https://codeclimate.com/github/bmedici/rest-ftp-daemon/badges/coverage.svg)](https://codeclimate.com/github/bmedici/rest-ftp-daemon/coverage)
|
7
7
|
|
8
8
|
|
9
|
-
A pretty simple FTP-client daemon, driven
|
10
|
-
|
11
|
-
|
9
|
+
A pretty simple but configurable and efficient FTP-client daemon, driven
|
10
|
+
through a RESTful API. Create transfer jobs by POSTing a simple JSON structure,
|
11
|
+
be notified of their completion, watch their status on a dedicated dashboard.
|
12
12
|
|
13
13
|
|
14
|
+
![Dashboard](dashboard.png)
|
14
15
|
|
15
16
|
|
16
17
|
Features
|
@@ -21,11 +22,11 @@ As of today, its main features are :
|
|
21
22
|
* Offer a basic dashboard directly within the daemon HTTP interface
|
22
23
|
* Periodically send an update-notification with transfer status and progress
|
23
24
|
* Allow environment-specific configuration in a YAML file
|
24
|
-
* Delegate a transfer job by
|
25
|
+
* Delegate a transfer job by `POST`'ing a simple JSON structure
|
25
26
|
* Spawn a dedicated thread to handle this job in its own context
|
26
27
|
* Report transfer status, progress and errors for each job in realtime
|
27
|
-
* Expose JSON status of workers on
|
28
|
-
*
|
28
|
+
* Expose JSON status of workers on `GET /jobs/` for automated monitoring
|
29
|
+
* Parallelize jobs as soon as they arrive
|
29
30
|
* Handle job queues and priority as an attribute of the job
|
30
31
|
* Allow dynamic evaluation of priorities, and change of any attribute until the job is picked
|
31
32
|
* Provide RESTful notifications to the requesting client
|
@@ -37,8 +38,8 @@ As of today, its main features are :
|
|
37
38
|
* Automatically clean-up jobs after a configurable amount of time (failed, finished)
|
38
39
|
* Current bitrate on the last blocks chunk updated in the job attributes
|
39
40
|
* Global bitrate on the whole file transfer is re-computed after the transfer finishes
|
40
|
-
* Daemon process is tagged with its name and
|
41
|
-
* Allow basic patterns in source filename to match multiple files (
|
41
|
+
* Daemon process is tagged with its name and environment in process lists
|
42
|
+
* Allow basic patterns in source filename to match multiple files (`/dir/file*.jpg`)
|
42
43
|
|
43
44
|
Expected features in a short-time range :
|
44
45
|
|
@@ -47,86 +48,42 @@ Expected features in a short-time range :
|
|
47
48
|
* Authenticate API clients
|
48
49
|
* Allow more transfer protocols (sFTP, HTTP POST etc)
|
49
50
|
|
50
|
-
|
51
|
+
Status
|
52
|
+
------------------------------------------------------------------------------------
|
51
53
|
|
52
|
-
|
54
|
+
Though lacking testing, this gem has been used successfully in production for
|
55
|
+
a while without glitches.
|
53
56
|
|
54
57
|
|
55
58
|
Installation
|
56
59
|
------------------------------------------------------------------------------------
|
57
60
|
|
58
|
-
|
59
|
-
|
60
|
-
You may use ```rbenv``` and ```ruby-build``` to get the right Ruby version. If this is your case, ensure that ruby-build definitions are up-to-date and include ruby-2.1.0
|
61
|
+
With Ruby (version 2.1 or higher) and rubygems properly installed, you only
|
62
|
+
need to issue :
|
61
63
|
|
62
64
|
```
|
63
|
-
|
64
|
-
# ruby-build --definitions | grep '2.1'
|
65
|
+
gem install rest-ftp-daemon
|
65
66
|
```
|
66
67
|
|
67
|
-
|
68
|
-
On Debian, 2.1.0 is not included in Wheezy and appears in Jessie's version of the package.
|
68
|
+
If that is not the case yet, see section [Debian install preparation](#debian-install-preparation).
|
69
69
|
|
70
|
-
Use a dedicated user for the daemon, switch to this user and enable rbenv
|
71
|
-
|
72
|
-
```
|
73
|
-
# adduser --disabled-password --gecos "" rftpd
|
74
|
-
# su rftpd -l
|
75
|
-
# echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
|
76
|
-
# echo 'eval "$(rbenv init -)"' >> ~/.bashrc
|
77
|
-
```
|
78
|
-
|
79
|
-
|
80
|
-
Install the right ruby version and activate it
|
81
70
|
|
82
|
-
|
83
|
-
# rbenv install 2.1.0
|
84
|
-
# rbenv local 2.1.0
|
85
|
-
# rbenv rehash
|
86
|
-
```
|
87
|
-
|
88
|
-
Update RubyGems and install the gem from rubygems.org
|
89
|
-
|
90
|
-
```
|
91
|
-
# gem update --system
|
92
|
-
# gem install rest-ftp-daemon --no-ri --no-rdoc
|
93
|
-
# rbenv rehash
|
94
|
-
# rest-ftp-daemon start
|
95
|
-
```
|
96
|
-
|
97
|
-
|
98
|
-
Configuration
|
71
|
+
Usage
|
99
72
|
------------------------------------------------------------------------------------
|
100
73
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
* the ``production`` section can receive personnalized settings according to your environment-specific setup and paths.
|
105
|
-
|
106
|
-
Configuration priority is defined as follows (from most important to last resort):
|
107
|
-
|
108
|
-
* command-line parameters
|
109
|
-
* config file defaults section
|
110
|
-
* config file environment section
|
111
|
-
* application internal defaults
|
112
|
-
|
113
|
-
As a starting point, ``rest-ftp-daemon.yml.sample`` is an exemple config file that can be copied into the expected location ``/etc/rest-ftp-daemon.yml``.
|
114
|
-
|
115
|
-
Default administrator credentials are admin/admin. Please change the password in this configuration file before starting any kind of production.
|
116
|
-
|
117
|
-
|
118
|
-
Execution
|
119
|
-
------------------------------------------------------------------------------------
|
74
|
+
You must provide a configuration file for the daemon to start, either
|
75
|
+
explicitly using option `--config` or implicitly at `/etc/rest-ftp-daemon.yml`.
|
76
|
+
(A sample file is provided see `--help` for more info about it.)
|
120
77
|
|
121
|
-
You can simply start the daemon on the
|
78
|
+
You can then simply start the daemon on the standard port, or on a specific port using `-p`
|
122
79
|
|
123
80
|
```
|
124
|
-
|
81
|
+
$ rest-ftp-daemon -p 3000 start
|
125
82
|
```
|
126
83
|
|
127
|
-
Check that the daemon is running and exposes a JSON status structure on
|
84
|
+
Check that the daemon is running and exposes a JSON status structure on `http://localhost:3000/status`.
|
128
85
|
|
129
|
-
The
|
86
|
+
The dashboard will provide a global view on `http://localhost:3000/`
|
130
87
|
|
131
88
|
If the daemon appears to exit quickly when launched, it may be caused by logfiles that can't be written (check files permissions or owner).
|
132
89
|
|
@@ -147,35 +104,17 @@ Launcher options :
|
|
147
104
|
| -v | --version | | Show the current version |
|
148
105
|
|
149
106
|
|
150
|
-
|
151
|
-
------------------------------------------------------------------------------------
|
152
|
-
|
153
|
-
The application will not log to any file by default, if not specified in its configuration.
|
154
|
-
Otherwise separate logging paths can be provided for the Thin webserver, API related messages, and workers related messages. Providing and empty value will simply activate logging to ``STDOUT``.
|
155
|
-
|
156
|
-
|
157
|
-
Job cleanup
|
107
|
+
Examples
|
158
108
|
------------------------------------------------------------------------------------
|
159
109
|
|
160
|
-
|
161
|
-
|
162
|
-
- "failed", cleaned up after conchita.clean_failed seconds
|
163
|
-
- "finished", cleaned up after conchita.clean_finished seconds
|
164
|
-
|
165
|
-
Cleanup is done on a regular basis, every X seconds (X = conchita.timer)
|
166
|
-
|
167
|
-
|
168
|
-
Usage examples
|
169
|
-
------------------------------------------------------------------------------------
|
170
|
-
|
171
|
-
* Start a job to transfer a file named "file.iso" to a local FTP server
|
110
|
+
#### Start a job to transfer a file named "file.iso" to a local FTP server
|
172
111
|
|
173
112
|
```
|
174
113
|
curl -H "Content-Type: application/json" -X POST -D /dev/stdout -d \
|
175
114
|
'{"source":"~/file.iso","target":"ftp://anonymous@localhost/incoming/dest2.iso"}' "http://localhost:3000/jobs"
|
176
115
|
```
|
177
116
|
|
178
|
-
|
117
|
+
#### Start a job using endpoint tokens
|
179
118
|
|
180
119
|
First define ``nas`` ans ``ftp1`` in the configuration file :
|
181
120
|
|
@@ -190,7 +129,7 @@ development:
|
|
190
129
|
ftp1: "ftp://anonymous@localhost/incoming/"
|
191
130
|
```
|
192
131
|
|
193
|
-
|
132
|
+
Those tokens will be expanded when the job is run:
|
194
133
|
|
195
134
|
```
|
196
135
|
curl -H "Content-Type: application/json" -X POST -D /dev/stdout -d \
|
@@ -198,16 +137,60 @@ curl -H "Content-Type: application/json" -X POST -D /dev/stdout -d \
|
|
198
137
|
```
|
199
138
|
|
200
139
|
|
201
|
-
|
140
|
+
#### Get info about a job with ID="q89j.1"
|
202
141
|
|
203
|
-
Both parameters
|
142
|
+
Both parameters `q89j.1` and `1` will be accepted as ID in the API. Requests below are equivalent:
|
204
143
|
|
205
144
|
```
|
206
|
-
GET http://localhost:
|
207
|
-
GET http://localhost:
|
145
|
+
GET http://localhost:3000/jobs/q89j.1
|
146
|
+
GET http://localhost:3000/jobs/1
|
208
147
|
```
|
209
148
|
|
210
149
|
|
150
|
+
API Documentation
|
151
|
+
------------------------------------------------------------------------------------
|
152
|
+
|
153
|
+
API documentation is [maintained on Apiary](http://docs.restftpdaemon.apiary.io/)
|
154
|
+
|
155
|
+
|
156
|
+
Configuration
|
157
|
+
------------------------------------------------------------------------------------
|
158
|
+
|
159
|
+
Most of the configuration options live in a YAML configuration file, containing two main sections:
|
160
|
+
|
161
|
+
* `defaults` section should be left as-is and will be used is no other environment-specific value is provided.
|
162
|
+
* `production` section can receive personalized settings according to your environment-specific setup and paths.
|
163
|
+
|
164
|
+
Configuration priority is defined as follows (from most important to last resort):
|
165
|
+
|
166
|
+
* command-line parameters
|
167
|
+
* config file defaults section
|
168
|
+
* config file environment section
|
169
|
+
* application internal defaults
|
170
|
+
|
171
|
+
As a starting point, `rest-ftp-daemon.yml.sample` is an example config file that can be copied into the expected location ``/etc/rest-ftp-daemon.yml``.
|
172
|
+
|
173
|
+
Default administrator credentials are `admin/admin`. Please change the password in this configuration file before starting any kind of production.
|
174
|
+
|
175
|
+
|
176
|
+
Logging
|
177
|
+
------------------------------------------------------------------------------------
|
178
|
+
|
179
|
+
The application will not log to any file by default, if not specified in its configuration.
|
180
|
+
Otherwise separate logging paths can be provided for the Thin webserver, API related messages, and workers related messages. Providing and empty value will simply activate logging to `STDOUT`.
|
181
|
+
|
182
|
+
|
183
|
+
Job cleanup
|
184
|
+
------------------------------------------------------------------------------------
|
185
|
+
|
186
|
+
Job can be cleanup up after a certain delay, when they are on one of these status:
|
187
|
+
|
188
|
+
- "failed", cleaned up after conchita.clean_failed seconds
|
189
|
+
- "finished", cleaned up after conchita.clean_finished seconds
|
190
|
+
|
191
|
+
Cleanup is done on a regular basis, every X seconds (X = conchita.timer)
|
192
|
+
|
193
|
+
|
211
194
|
TODO for this document
|
212
195
|
------------------------------------------------------------------------------------
|
213
196
|
|
@@ -222,6 +205,89 @@ TODO for this document
|
|
222
205
|
* Document counters
|
223
206
|
|
224
207
|
|
208
|
+
|
209
|
+
Debian install preparation
|
210
|
+
------------------------------------------------------------------------------------
|
211
|
+
|
212
|
+
This project is available as a rubygem, requires Ruby 2.1 and rubygems installed.
|
213
|
+
|
214
|
+
You may use `rbenv` and `ruby-build` to get the right Ruby version. If this is your case, ensure that ruby-build definitions are up-to-date and include ruby-2.1.0
|
215
|
+
|
216
|
+
```
|
217
|
+
# apt-get install ruby-build rbenv
|
218
|
+
# ruby-build --definitions | grep '2.1'
|
219
|
+
```
|
220
|
+
|
221
|
+
Otherwise, you way have to update ruby-build to include Ruby 2.1.0 definitions.
|
222
|
+
On Debian, 2.1.0 is not included in Wheezy and appears in Jessie's version of the package.
|
223
|
+
|
224
|
+
Use a dedicated user for the daemon, switch to this user and enable rbenv
|
225
|
+
|
226
|
+
```
|
227
|
+
# adduser --disabled-password --gecos "" rftpd
|
228
|
+
# su rftpd -l
|
229
|
+
# echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
|
230
|
+
# echo 'eval "$(rbenv init -)"' >> ~/.bashrc
|
231
|
+
```
|
232
|
+
|
233
|
+
|
234
|
+
Install the right ruby version and activate it
|
235
|
+
|
236
|
+
```
|
237
|
+
# rbenv install 2.1.0
|
238
|
+
# rbenv local 2.1.0
|
239
|
+
# rbenv rehash
|
240
|
+
```
|
241
|
+
|
242
|
+
Update RubyGems and install the gem from rubygems.org
|
243
|
+
|
244
|
+
```
|
245
|
+
# gem update --system
|
246
|
+
# gem install rest-ftp-daemon --no-ri --no-rdoc
|
247
|
+
# rbenv rehash
|
248
|
+
# rest-ftp-daemon start
|
249
|
+
```
|
250
|
+
|
251
|
+
Known bugs
|
252
|
+
------------------------------------------------------------------------------------
|
253
|
+
|
254
|
+
* As this project is based on SettingsLogic, which in turns uses Syck YAML parser, configuration merge from "defaults" section and environment-specific section is broken. A sub-tree defined for a specific environment, will overwrite the corresponding subtree from "defaults".
|
255
|
+
|
256
|
+
|
257
|
+
Contributing
|
258
|
+
------------------------------------------------------------------------------------
|
259
|
+
|
260
|
+
Contributions are more than welcome, be it for documentation, features, tests,
|
261
|
+
refactoring, you name it. If you are unsure of where to start, the [Code
|
262
|
+
Climate](https://codeclimate.com/github/bmedici/rest-ftp-daemon) report will
|
263
|
+
provide you with improvement directions. And of course, if in doubt, do not
|
264
|
+
hesitate to open an issue. (Please note that this project has adopted a [code
|
265
|
+
of conduct](CODE_OF_CONDUCT.md).)
|
266
|
+
|
267
|
+
If you want your contribution to adopted in the smoothest and fastest way, don't
|
268
|
+
forget to:
|
269
|
+
|
270
|
+
* provide sufficient documentation in you commit and pull request
|
271
|
+
* add proper testing (we know full grown solid test coverage is still lacking and
|
272
|
+
need to up the game)
|
273
|
+
* use the [RuboCop](https://github.com/bbatsov/rubocop) guidelines provided
|
274
|
+
(there are all sorts of editor integration plugins available)
|
275
|
+
|
276
|
+
So,
|
277
|
+
|
278
|
+
1. Fork the project
|
279
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
280
|
+
3. Code
|
281
|
+
* add proper tests if adding a feature
|
282
|
+
* run the tests using `rake`
|
283
|
+
* check for RuboCop style guide violations
|
284
|
+
|
285
|
+
4. Commit your changes
|
286
|
+
5. Push to the branch (`git push origin my-new-feature`)
|
287
|
+
|
288
|
+
6. Create new Pull Request
|
289
|
+
|
290
|
+
|
225
291
|
About
|
226
292
|
------------------------------------------------------------------------------------
|
227
293
|
|