geo_concerns 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/README.md +41 -0
- data/app/jobs/delivery_job.rb +1 -1
- data/app/services/geo_concerns/delivery/geoserver.rb +36 -25
- data/app/services/geo_concerns/delivery_service.rb +2 -2
- data/docker-compose.yml +10 -0
- data/geo_concerns.gemspec +1 -1
- data/lib/generators/geo_concerns/templates/config/geoserver.yml +23 -15
- data/lib/geo_concerns/version.rb +1 -1
- data/run-docker.sh +7 -0
- data/spec/jobs/delivery_job_spec.rb +4 -3
- data/spec/services/geo_concerns/delivery/geoserver_spec.rb +65 -40
- data/spec/services/geo_concerns/delivery_service_spec.rb +14 -5
- data/template.rb +1 -1
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7859ed88c8abf63d62c3f01656c86bef9100759a
|
4
|
+
data.tar.gz: 9d9b2132b6e5497633bc66604656917fe6cf801b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9396b438f6ee45eef45ecd87b180e54f66e4a23bc83297c27dad047f4065eede959f5870c84ae94adff9529c3a13d6242067be951cbc1ccef497921618d83efb
|
7
|
+
data.tar.gz: a21f787e7a4762b5aeab53a76386975a6f92170a2b55dec1e2537438cb5466df028e9ddbf4856dc3eff3da6c51b5eafa7186910d9528bce9a9a60e8c218ec468
|
data/.travis.yml
CHANGED
@@ -18,6 +18,7 @@ before_install:
|
|
18
18
|
- sudo apt-add-repository --yes ppa:mapnik/nightly-${MAPNIK_VERSION}
|
19
19
|
- sudo apt-get update -y
|
20
20
|
- sudo apt-get -y install libmapnik=${MAPNIK_VERSION}* mapnik-utils=${MAPNIK_VERSION}* libmapnik-dev=${MAPNIK_VERSION}* mapnik-input-plugin*=${MAPNIK_VERSION}*
|
21
|
+
- gem install bundler -v 1.13.1 # hopefully temporary
|
21
22
|
install: bundle install --jobs=3 --retry=3
|
22
23
|
before_script:
|
23
24
|
- gdalinfo --version
|
data/README.md
CHANGED
@@ -21,6 +21,7 @@ Rails application for developing Hydra Geo models. Built around Curation Concern
|
|
21
21
|
1. [GDAL](http://www.gdal.org/)
|
22
22
|
* You can install it on Mac OSX with `brew install gdal`.
|
23
23
|
* On Ubuntu, use `sudo apt-get install gdal-bin`.
|
24
|
+
1. [GeoServer](http://geoserver.org/) (Optional)
|
24
25
|
|
25
26
|
## Mapnik
|
26
27
|
|
@@ -73,3 +74,43 @@ Then, in another terminal window:
|
|
73
74
|
```
|
74
75
|
$ rake spec
|
75
76
|
```
|
77
|
+
|
78
|
+
## Running GeoServer for Development with Docker
|
79
|
+
|
80
|
+
### MacOS
|
81
|
+
|
82
|
+
1. Make sure you have docker engine, docker-machine, and docker-compose installed.
|
83
|
+
- Docker Toolbox: [https://www.docker.com/products/docker-toolbox](https://www.docker.com/products/docker-toolbox)
|
84
|
+
|
85
|
+
1. Execute the following command in the geo_concerns directory:
|
86
|
+
|
87
|
+
```
|
88
|
+
$ source ./run-docker.sh
|
89
|
+
```
|
90
|
+
|
91
|
+
### Linux
|
92
|
+
|
93
|
+
1. Make sure you have docker engine and docker-compose installed.
|
94
|
+
- [https://docs.docker.com/engine/installation/linux/](https://docs.docker.com/engine/installation/linux/)
|
95
|
+
- [https://docs.docker.com/compose/install/](https://docs.docker.com/compose/install/)
|
96
|
+
|
97
|
+
1. Execute the following commands in the geo_concerns directory:
|
98
|
+
|
99
|
+
```
|
100
|
+
$ docker-compose up -d
|
101
|
+
$ export GEOSERVER_URL="http://localhost:8181/geoserver/rest"
|
102
|
+
```
|
103
|
+
|
104
|
+
## Running GeoServer for Development with Vagrant
|
105
|
+
|
106
|
+
1. Make sure you have VirtualBox and Vagrant installed.
|
107
|
+
- [https://www.virtualbox.org/wiki/Downloads](https://www.virtualbox.org/wiki/Downloads)
|
108
|
+
- [https://www.vagrantup.com/docs/installation/](https://www.vagrantup.com/docs/installation/)
|
109
|
+
1. Execute the following commands:
|
110
|
+
|
111
|
+
```
|
112
|
+
$ git clone https://github.com/geoconcerns/geoserver-vagrant.git
|
113
|
+
$ cd geoserver-vagrant/
|
114
|
+
$ vagrant up
|
115
|
+
|
116
|
+
```
|
data/app/jobs/delivery_job.rb
CHANGED
@@ -13,6 +13,6 @@ class DeliveryJob < ActiveJob::Base
|
|
13
13
|
def perform(file_set, content_url)
|
14
14
|
uri = URI.parse(content_url)
|
15
15
|
raise NotImplementedError, 'Only supports file URLs' unless uri.scheme == 'file'
|
16
|
-
GeoConcerns::DeliveryService.new
|
16
|
+
GeoConcerns::DeliveryService.new(file_set, uri.path).publish
|
17
17
|
end
|
18
18
|
end
|
@@ -1,25 +1,18 @@
|
|
1
1
|
require 'active_support/core_ext/hash/indifferent_access'
|
2
2
|
require 'rgeoserver'
|
3
3
|
require 'yaml'
|
4
|
+
require 'erb'
|
4
5
|
|
5
6
|
module GeoConcerns
|
6
7
|
module Delivery
|
7
8
|
class Geoserver
|
8
|
-
|
9
|
-
url: 'http://localhost:8181/geoserver/rest',
|
10
|
-
user: 'admin',
|
11
|
-
password: 'geoserver'
|
12
|
-
}.with_indifferent_access.freeze
|
9
|
+
attr_reader :config, :workspace_name, :file_set, :file_path
|
13
10
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
@config = YAML.load(data)['geoserver'].with_indifferent_access.freeze
|
20
|
-
rescue Errno::ENOENT
|
21
|
-
@config = DEFAULT_CONFIG
|
22
|
-
end
|
11
|
+
def initialize(file_set, file_path)
|
12
|
+
@file_set = file_set
|
13
|
+
@file_path = file_path
|
14
|
+
@config = fetch_config
|
15
|
+
@workspace_name = @config.delete(:workspace)
|
23
16
|
validate!
|
24
17
|
end
|
25
18
|
|
@@ -27,12 +20,12 @@ module GeoConcerns
|
|
27
20
|
@catalog ||= RGeoServer.catalog(config)
|
28
21
|
end
|
29
22
|
|
30
|
-
def publish(
|
23
|
+
def publish(type = :vector)
|
31
24
|
case type
|
32
25
|
when :vector
|
33
|
-
publish_vector
|
26
|
+
publish_vector
|
34
27
|
when :raster
|
35
|
-
publish_raster
|
28
|
+
publish_raster
|
36
29
|
else
|
37
30
|
raise ArgumentError, "Unknown file type #{type}"
|
38
31
|
end
|
@@ -40,23 +33,41 @@ module GeoConcerns
|
|
40
33
|
|
41
34
|
private
|
42
35
|
|
36
|
+
def fetch_config
|
37
|
+
raise ArgumentError, "FileSet visibility must be open or authenticated" unless visibility
|
38
|
+
|
39
|
+
data = ERB.new(File.read(Rails.root.join('config', 'geoserver.yml'))).result
|
40
|
+
YAML.load(data)['geoserver'][visibility].with_indifferent_access
|
41
|
+
end
|
42
|
+
|
43
|
+
def visibility
|
44
|
+
return file_set.visibility if file_set.visibility == 'open'
|
45
|
+
return file_set.visibility if file_set.visibility == 'authenticated'
|
46
|
+
end
|
47
|
+
|
43
48
|
def validate!
|
44
49
|
%w(url user password).map(&:to_sym).each do |k|
|
45
50
|
raise ArgumentError, "Missing #{k} in configuration" unless config[k].present?
|
46
51
|
end
|
47
52
|
end
|
48
53
|
|
49
|
-
def
|
50
|
-
|
51
|
-
|
52
|
-
workspace = RGeoServer::Workspace.new catalog, name: 'geo'
|
54
|
+
def workspace
|
55
|
+
workspace = RGeoServer::Workspace.new catalog, name: workspace_name
|
53
56
|
workspace.save if workspace.new?
|
54
|
-
|
55
|
-
|
57
|
+
workspace
|
58
|
+
end
|
59
|
+
|
60
|
+
def datastore
|
61
|
+
RGeoServer::DataStore.new catalog, workspace: workspace, name: file_set.id
|
62
|
+
end
|
63
|
+
|
64
|
+
def publish_vector
|
65
|
+
raise ArgumentError, "Not ZIPed Shapefile: #{file_path}" unless file_path =~ /\.zip$/
|
66
|
+
datastore.upload_file file_path, publish: true
|
56
67
|
end
|
57
68
|
|
58
|
-
def publish_raster
|
59
|
-
raise ArgumentError, "Not GeoTIFF: #{
|
69
|
+
def publish_raster
|
70
|
+
raise ArgumentError, "Not GeoTIFF: #{file_path}" unless file_path =~ /\.tif$/
|
60
71
|
raise NotImplementedError
|
61
72
|
end
|
62
73
|
end
|
@@ -2,8 +2,8 @@ module GeoConcerns
|
|
2
2
|
class DeliveryService
|
3
3
|
attr_reader :geoserver
|
4
4
|
|
5
|
-
def initialize
|
6
|
-
@geoserver = GeoConcerns::Delivery::Geoserver.new
|
5
|
+
def initialize(file_set, file_path)
|
6
|
+
@geoserver = GeoConcerns::Delivery::Geoserver.new(file_set, file_path)
|
7
7
|
end
|
8
8
|
|
9
9
|
delegate :publish, to: :geoserver
|
data/docker-compose.yml
ADDED
data/geo_concerns.gemspec
CHANGED
@@ -26,8 +26,8 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_dependency 'json-schema', '>= 2.6.2'
|
27
27
|
spec.add_dependency 'rgeoserver', '>= 0.9.1'
|
28
28
|
|
29
|
-
spec.add_dependency 'bundler', '~> 1.12.5' # TODO: 1.13 breaks our builds
|
30
29
|
|
30
|
+
spec.add_development_dependency 'bundler', '~> 1.13'
|
31
31
|
spec.add_development_dependency 'sqlite3'
|
32
32
|
spec.add_development_dependency 'devise', '>= 3.0', '< 5'
|
33
33
|
spec.add_development_dependency 'rspec-rails', '>= 3.5.2'
|
@@ -1,17 +1,25 @@
|
|
1
1
|
geoserver:
|
2
|
-
# Set to the REST API for the GeoServer
|
3
|
-
url: "http://localhost:8181/geoserver/rest"
|
4
|
-
# Optional user/password, set to false to disable
|
5
|
-
user: "admin"
|
6
|
-
password: "geoserver"
|
7
|
-
# Set to your GWC server, or "builtin" for the one bundled with GeoServer
|
8
|
-
geowebcache_url: "builtin"
|
9
2
|
|
10
|
-
#
|
11
|
-
|
12
|
-
# Set to
|
13
|
-
|
14
|
-
#
|
15
|
-
|
16
|
-
|
17
|
-
|
3
|
+
# GeoServer config options for open and public data
|
4
|
+
open: &open
|
5
|
+
# Set to the REST API for the GeoServer
|
6
|
+
url: <%= ENV['PUBLIC_GEOSERVER_URL'] || "http://localhost:8181/geoserver/rest" %>
|
7
|
+
# Optional user and password, set to false to disable
|
8
|
+
user: <%= ENV['PUBLIC_GEOSERVER_USER'] || "admin" %>
|
9
|
+
password: <%= ENV['PUBLIC_GEOSERVER_PASSWORD'] || "geoserver" %>
|
10
|
+
# Set to your GWC server, or "builtin" for the one bundled with GeoServer
|
11
|
+
geowebcache_url: <%= ENV['PUBLIC_GEOSERVER_GWC_URL'] || "builtin" %>
|
12
|
+
# Name of the workspace to save your data in
|
13
|
+
workspace: <%= ENV['PUBLIC_GEOSERVER_WS'] || "public" %>
|
14
|
+
restclient:
|
15
|
+
# Set to false to disable or stdout, stderr, or filename
|
16
|
+
logfile: stderr
|
17
|
+
# Timeout (in seconds)
|
18
|
+
timeout: 300
|
19
|
+
# Open Timeout (in seconds)
|
20
|
+
open_timeout: 60
|
21
|
+
|
22
|
+
# GeoServer config options for restricted data or data that needs authentication
|
23
|
+
authenticated:
|
24
|
+
<<: *open
|
25
|
+
workspace: <%= ENV['AUTH_GEOSERVER_WS'] || "restricted" %>
|
data/lib/geo_concerns/version.rb
CHANGED
data/run-docker.sh
ADDED
@@ -7,13 +7,14 @@ describe GeoConcerns::DeliveryJob do
|
|
7
7
|
context '#perform' do
|
8
8
|
context 'local file' do
|
9
9
|
let(:content_url) { 'file:/somewhere-to-display-copy' }
|
10
|
+
let(:service) { instance_double('GeoConcerns::DeliveryService') }
|
10
11
|
it 'delegates to DeliveryService' do
|
11
|
-
|
12
|
-
expect(
|
13
|
-
expect(dbl).to receive(:publish).with(file_set.id, URI(content_url).path)
|
12
|
+
expect(GeoConcerns::DeliveryService).to receive(:new).with(file_set, URI(content_url).path).and_return(service)
|
13
|
+
expect(service).to receive(:publish)
|
14
14
|
subject.perform(file_set, content_url)
|
15
15
|
end
|
16
16
|
end
|
17
|
+
|
17
18
|
context 'remote file' do
|
18
19
|
let(:content_url) { 'http://somewhere/to-display-copy' }
|
19
20
|
it 'errors out' do
|
@@ -2,71 +2,96 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe GeoConcerns::Delivery::Geoserver do
|
4
4
|
let(:id) { 'abc123' }
|
5
|
+
let(:file_set) { instance_double("FileSet") }
|
6
|
+
let(:visibility) { 'open' }
|
7
|
+
let(:path) { 'spec/fixtures/files/tufts-cambridgegrid100-04.zip' }
|
5
8
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
+
subject { described_class.new file_set, path }
|
10
|
+
|
11
|
+
before do
|
12
|
+
allow(file_set).to receive(:visibility).and_return(visibility)
|
13
|
+
allow(file_set).to receive(:id).and_return(id)
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'with an authenticated file set visibility' do
|
17
|
+
let(:visibility) { 'authenticated' }
|
18
|
+
it 'does not raise error' do
|
9
19
|
expect { subject }.not_to raise_error
|
10
|
-
expect(subject.config).to include('url' => 'http://localhost:8181/geoserver/rest',
|
11
|
-
'user' => 'admin',
|
12
|
-
'password' => 'geoserver')
|
13
20
|
end
|
14
21
|
end
|
15
22
|
|
16
|
-
context '
|
17
|
-
|
18
|
-
|
19
|
-
subject.
|
20
|
-
subject.catalog # should cache result
|
23
|
+
context 'with a private file set visibility' do
|
24
|
+
let(:visibility) { 'private' }
|
25
|
+
it 'raises an error' do
|
26
|
+
expect { subject }.to raise_error(ArgumentError, /FileSet visibility/)
|
21
27
|
end
|
22
28
|
end
|
23
29
|
|
24
|
-
|
30
|
+
describe '#publish' do
|
25
31
|
it 'requires a valid type' do
|
26
|
-
expect { subject.publish(
|
32
|
+
expect { subject.publish(:unknown) }.to raise_error(ArgumentError, /Unknown file type/)
|
27
33
|
end
|
28
|
-
|
34
|
+
|
35
|
+
context 'when type is vector' do
|
29
36
|
let(:type) { :vector }
|
30
|
-
let(:filename) { 'file.zip' }
|
31
37
|
it 'routes to publish_vector' do
|
32
|
-
expect(subject).to receive(:publish_vector)
|
33
|
-
subject.publish(
|
38
|
+
expect(subject).to receive(:publish_vector)
|
39
|
+
subject.publish(type)
|
34
40
|
end
|
35
41
|
end
|
36
|
-
|
42
|
+
|
43
|
+
context 'when type is raster' do
|
37
44
|
let(:type) { :raster }
|
38
|
-
let(:filename) { 'file.tif' }
|
39
45
|
it 'routes to publish_raster' do
|
40
|
-
expect(subject).to receive(:publish_raster)
|
41
|
-
subject.publish(
|
46
|
+
expect(subject).to receive(:publish_raster)
|
47
|
+
subject.publish(type)
|
42
48
|
end
|
43
49
|
end
|
44
50
|
end
|
45
51
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
52
|
+
describe '#publish_vector' do
|
53
|
+
context 'when a vector is not a zip file' do
|
54
|
+
let(:path) { 'not-a-zip' }
|
55
|
+
it 'raises an error' do
|
56
|
+
expect { subject.send(:publish_vector) }.to raise_error(ArgumentError, /Not ZIPed Shapefile/)
|
57
|
+
end
|
50
58
|
end
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
59
|
+
|
60
|
+
context 'with a path to a zipped shapefile' do
|
61
|
+
let(:ws) { double }
|
62
|
+
let(:ds) { double }
|
63
|
+
|
64
|
+
it 'dispatches to RGeoServer' do
|
65
|
+
expect(RGeoServer::Workspace).to receive(:new).with(subject.catalog, hash_including(name: 'public')).and_return(ws)
|
66
|
+
expect(ws).to receive(:'new?').and_return(true)
|
67
|
+
expect(ws).to receive(:save)
|
68
|
+
expect(RGeoServer::DataStore).to receive(:new).with(subject.catalog, hash_including(workspace: ws, name: id)).and_return(ds)
|
69
|
+
expect(ds).to receive(:upload_file).with(path, hash_including(publish: true))
|
70
|
+
subject.send(:publish_vector)
|
71
|
+
end
|
60
72
|
end
|
61
73
|
end
|
62
74
|
|
63
|
-
|
64
|
-
let(:
|
65
|
-
|
66
|
-
expect { subject.send(:publish_raster, id, 'not-a-tiff') }.to raise_error(ArgumentError, /Not GeoTIFF/)
|
67
|
-
end
|
75
|
+
describe '#publish_raster' do
|
76
|
+
let(:path) { 'spec/fixtures/files/S_566_1914_clip.tif' }
|
77
|
+
|
68
78
|
it 'is not implemented yet' do
|
69
|
-
expect { subject.send(:publish_raster
|
79
|
+
expect { subject.send(:publish_raster) }.to raise_error(NotImplementedError)
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'when a raster is not a GeoTIFF file' do
|
83
|
+
let(:path) { 'not-a-tiff' }
|
84
|
+
it 'raises an error' do
|
85
|
+
expect { subject.send(:publish_raster) }.to raise_error(ArgumentError, /Not GeoTIFF/)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe '#catalog' do
|
91
|
+
it 'connects to a RGeoServer catalog' do
|
92
|
+
expect(RGeoServer).to receive(:catalog).with(hash_including(:url, :user, :password)).and_return(double).once
|
93
|
+
subject.catalog
|
94
|
+
subject.catalog # should cache result
|
70
95
|
end
|
71
96
|
end
|
72
97
|
end
|
@@ -2,14 +2,23 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe GeoConcerns::DeliveryService do
|
4
4
|
let(:id) { 'abc123' }
|
5
|
-
let(:
|
5
|
+
let(:path) { 'somewhere-to-display-copy' }
|
6
|
+
let(:file_set) { instance_double("FileSet") }
|
7
|
+
let(:visibility) { 'open' }
|
8
|
+
let(:service) { instance_double('GeoConcerns::Delivery::Geoserver') }
|
9
|
+
|
10
|
+
subject { described_class.new file_set, path }
|
11
|
+
|
12
|
+
before do
|
13
|
+
allow(file_set).to receive(:visibility).and_return(visibility)
|
14
|
+
allow(service).to receive(:visibility).and_return(visibility)
|
15
|
+
end
|
6
16
|
|
7
17
|
context '#publish' do
|
8
18
|
it 'dispatches to Geoserver delivery' do
|
9
|
-
|
10
|
-
expect(
|
11
|
-
|
12
|
-
subject.publish(id, filename)
|
19
|
+
expect(subject).to receive(:geoserver).and_return(service)
|
20
|
+
expect(service).to receive(:publish)
|
21
|
+
subject.publish
|
13
22
|
end
|
14
23
|
end
|
15
24
|
end
|
data/template.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geo_concerns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Griffin
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2016-09-
|
15
|
+
date: 2016-09-15 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: curation_concerns
|
@@ -90,14 +90,14 @@ dependencies:
|
|
90
90
|
requirements:
|
91
91
|
- - "~>"
|
92
92
|
- !ruby/object:Gem::Version
|
93
|
-
version: 1.
|
94
|
-
type: :
|
93
|
+
version: '1.13'
|
94
|
+
type: :development
|
95
95
|
prerelease: false
|
96
96
|
version_requirements: !ruby/object:Gem::Requirement
|
97
97
|
requirements:
|
98
98
|
- - "~>"
|
99
99
|
- !ruby/object:Gem::Version
|
100
|
-
version: 1.
|
100
|
+
version: '1.13'
|
101
101
|
- !ruby/object:Gem::Dependency
|
102
102
|
name: sqlite3
|
103
103
|
requirement: !ruby/object:Gem::Requirement
|
@@ -468,6 +468,7 @@ files:
|
|
468
468
|
- app/views/geo_concerns/related/_parent_works.html.erb
|
469
469
|
- app/vocabs/geo_concerns/geo_terms.rb
|
470
470
|
- config/routes.rb
|
471
|
+
- docker-compose.yml
|
471
472
|
- geo_concerns.gemspec
|
472
473
|
- lib/generators/geo_concerns/install_generator.rb
|
473
474
|
- lib/generators/geo_concerns/templates/actors/curation_concerns/actors/image_work_actor.rb
|
@@ -499,6 +500,7 @@ files:
|
|
499
500
|
- lib/geo_concerns/engine.rb
|
500
501
|
- lib/geo_concerns/version.rb
|
501
502
|
- lib/tasks/geo_concerns_tasks.rake
|
503
|
+
- run-docker.sh
|
502
504
|
- solr/config/_rest_managed.json
|
503
505
|
- solr/config/admin-extra.html
|
504
506
|
- solr/config/elevate.xml
|