daimon_skycrawlers 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +50 -1
  3. data/lib/daimon_skycrawlers/consumer/http_response.rb +2 -1
  4. data/lib/daimon_skycrawlers/crawler.rb +3 -1
  5. data/lib/daimon_skycrawlers/crawler/base.rb +2 -2
  6. data/lib/daimon_skycrawlers/filter/base.rb +1 -1
  7. data/lib/daimon_skycrawlers/filter/duplicate_checker.rb +6 -5
  8. data/lib/daimon_skycrawlers/filter/robots_txt_checker.rb +4 -2
  9. data/lib/daimon_skycrawlers/filter/update_checker.rb +3 -2
  10. data/lib/daimon_skycrawlers/generator/new.rb +33 -1
  11. data/lib/daimon_skycrawlers/generator/templates/new/Dockerfile +25 -0
  12. data/lib/daimon_skycrawlers/generator/templates/new/Dockerfile.db +6 -0
  13. data/lib/daimon_skycrawlers/generator/templates/new/README.md.erb +34 -0
  14. data/lib/daimon_skycrawlers/generator/templates/new/app/filters/sample_filter.rb +9 -0
  15. data/lib/daimon_skycrawlers/generator/templates/new/config/database.yml.erb +1 -0
  16. data/lib/daimon_skycrawlers/generator/templates/new/config/init.rb +12 -6
  17. data/lib/daimon_skycrawlers/generator/templates/new/docker-compose.yml.erb +35 -0
  18. data/lib/daimon_skycrawlers/generator/templates/new/env.db.erb +5 -0
  19. data/lib/daimon_skycrawlers/generator/templates/new/env.erb +2 -0
  20. data/lib/daimon_skycrawlers/generator/templates/new/services/common/docker-entrypoint.sh +30 -0
  21. data/lib/daimon_skycrawlers/generator/templates/new/services/db/init-user-db.sh +9 -0
  22. data/lib/daimon_skycrawlers/processor.rb +3 -1
  23. data/lib/daimon_skycrawlers/processor/base.rb +3 -3
  24. data/lib/daimon_skycrawlers/processor/proc.rb +16 -0
  25. data/lib/daimon_skycrawlers/tasks/database_tasks.rake +2 -0
  26. data/lib/daimon_skycrawlers/version.rb +1 -1
  27. metadata +11 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3c9d264378336af1acadb1bec4dc2dba783d9089
4
- data.tar.gz: c532cd7213889299f369ba2e8e682ea69a39172a
3
+ metadata.gz: 2fd637d109812fe657a771536f3c3a0041e4868a
4
+ data.tar.gz: 031bf50b2b72e6320ee748cb9044e177f24f5d2f
5
5
  SHA512:
6
- metadata.gz: 86bcf270ee971a26cd029ab9bd9372cfbe544e15640b3275e897e8b0ec2131976db379330a047ef5ea03bf9f568c111e083a135ae1fddd3d0ead38a373086e33
7
- data.tar.gz: a9aef67c6bcb70488a1ce0c5e54ed565f65e7a5490b2e0b7db87feb2960801bb829467d991ae4fb3ab52ddef145d25315ba03ca1e2178256b5147b7b52a043a2
6
+ metadata.gz: 59f6404ea231ecc337b1658406daa8c1e3b0d557ddc3d46c37efa91b1f7d3e0f8018d524aa3c2cc227fbee57d04ef51d7561ae879fd5d0fc719f4fca1308afb3
7
+ data.tar.gz: eeb06f74ae722a6cdf18d00f0aeda3e06e06199e02ddd2f0e52fedb3c7a7028c4a99e46a8c19d2a4e6aa0c3979f0602757d5598a5e1de39112457d1b5dce5679
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # DaimonSkycrawlers
4
4
 
5
- DaimonSkyCrawlers is a crawler framework.
5
+ DaimonSkycrawlers is a crawler framework.
6
6
 
7
7
  ## Requirements
8
8
 
@@ -90,6 +90,55 @@ Or install it yourself as:
90
90
 
91
91
  Display `It works with 'http://example.com'` again on your terminal which runs your processor.
92
92
 
93
+ ### docker-compose
94
+
95
+ 1. Create project
96
+
97
+ ```
98
+ $ bundle exec daimon_skycrawlers new mycrawlers
99
+ $ cd mycrawlers
100
+ ```
101
+ or
102
+ ```
103
+ $ daimon_skycrawlers new mycrawlers
104
+ $ cd mycrawlers
105
+ ```
106
+
107
+ 2. Build docker images
108
+
109
+ ```
110
+ $ docker-compose build
111
+ ```
112
+
113
+ 3. Run docker containers
114
+
115
+ ```
116
+ $ docker-compose up -d
117
+ ```
118
+
119
+ 4. Run a command on docker containers
120
+
121
+ ```
122
+ $ docker-compose exec <service name> <command>
123
+ ```
124
+
125
+ For example,
126
+
127
+ ```
128
+ $ docker-compose exec mycrawlers-db bash
129
+ $ docker-compose exec mycrawlers-crawler sh
130
+ $ docker-compose exec mycrawlers-crawler bundle exec daimon_skycrawlers enqueue url http://example.com/
131
+ $ docker-compose exec mycrawlers-crawler bundle exec daimon_skycrawlers enqueue response http://example.com/
132
+ ```
133
+
134
+ 5. Shutdown docker containers
135
+
136
+ ```
137
+ $ docker-compose down
138
+ $ docker-compose down --rmi all # Remove all related images
139
+ ```
140
+
141
+
93
142
  ## Development
94
143
 
95
144
  After checking out the repo, run `bundle install` to install dependencies. Then, run `bundle exec rake test` to run the tests. You can also run `bundle console` for an interactive prompt that will allow you to experiment.
@@ -2,6 +2,7 @@ require "songkick_queue"
2
2
  require "daimon_skycrawlers"
3
3
  require "daimon_skycrawlers/consumer/base"
4
4
  require "daimon_skycrawlers/processor/default"
5
+ require "daimon_skycrawlers/processor/proc"
5
6
 
6
7
  module DaimonSkycrawlers
7
8
  module Consumer
@@ -27,7 +28,7 @@ module DaimonSkycrawlers
27
28
  #
28
29
  def register(processor = nil, &block)
29
30
  if block_given?
30
- processors << block
31
+ processors << DaimonSkycrawlers::Processor::Proc.new(block)
31
32
  else
32
33
  processors << processor
33
34
  end
@@ -12,7 +12,9 @@ module DaimonSkycrawlers
12
12
  # @param process_name [String] Process name
13
13
  #
14
14
  def run(process_name: default_process_name)
15
- DaimonSkycrawlers::Timer.setup_shutdown_timer(config.queue_name_prefix, interval: config.shutdown_interval)
15
+ if config.shutdown_interval > 0
16
+ DaimonSkycrawlers::Timer.setup_shutdown_timer(config.queue_name_prefix, interval: config.shutdown_interval)
17
+ end
16
18
  SongkickQueue::Worker.new(process_name, [DaimonSkycrawlers::Consumer::URL]).run
17
19
  end
18
20
 
@@ -112,13 +112,13 @@ module DaimonSkycrawlers
112
112
  def apply_filters(url)
113
113
  if @options[:obey_robots_txt]
114
114
  robots_txt_checker = DaimonSkycrawlers::Filter::RobotsTxtChecker.new(base_url: @base_url)
115
- unless robots_txt_checker.allowed?(url)
115
+ unless robots_txt_checker.allowed?({ url: url })
116
116
  skip(url)
117
117
  return
118
118
  end
119
119
  end
120
120
  update_checker = DaimonSkycrawlers::Filter::UpdateChecker.new(storage: storage)
121
- unless update_checker.updated?(url.to_s, connection: connection)
121
+ unless update_checker.updated?({ url: url.to_s }, connection: connection)
122
122
  skip(url)
123
123
  return
124
124
  end
@@ -24,7 +24,7 @@ module DaimonSkycrawlers
24
24
  @storage ||= DaimonSkycrawlers::Storage::RDB.new
25
25
  end
26
26
 
27
- def call(url)
27
+ def call(message)
28
28
  raise NotImplementedError, "Must implement this method in subclass"
29
29
  end
30
30
  end
@@ -16,11 +16,12 @@ module DaimonSkycrawlers
16
16
  end
17
17
 
18
18
  #
19
- # @param [String] url to check duplication. If given URL is
19
+ # @param [Hash] message to check duplication. If given URL is
20
20
  # relative URL, use `@base_url + url` as absolute URL.
21
21
  # @return [true|false] Return false when duplicated, otherwise return true.
22
22
  #
23
- def call(url)
23
+ def call(message)
24
+ url = message[:url]
24
25
  unless URI(url).absolute?
25
26
  url = (@base_url + url).to_s
26
27
  end
@@ -30,12 +31,12 @@ module DaimonSkycrawlers
30
31
  end
31
32
 
32
33
  #
33
- # @param [String] url to check duplication. If given URL is
34
+ # @param [Hash] message to check duplication. If given URL is
34
35
  # relative URL, use `@base_url + url` as absolute URL.
35
36
  # @return [true|false] Return true when duplicated, otherwise return false.
36
37
  #
37
- def duplicated?(url)
38
- !call(url)
38
+ def duplicated?(message)
39
+ !call(message)
39
40
  end
40
41
  end
41
42
  end
@@ -11,14 +11,16 @@ module DaimonSkycrawlers
11
11
  class RobotsTxtChecker < Base
12
12
  def initialize(base_url: nil, user_agent: "DaimonSkycrawlers/#{DaimonSkycrawlers::VERSION}")
13
13
  super()
14
+ @base_url = base_url
14
15
  @webrobots = WebRobots.new(user_agent)
15
16
  end
16
17
 
17
18
  #
18
- # @param [String] url
19
+ # @param [Hash] message
19
20
  # @return [true|false] Return true when web site allows to fetch the URL, otherwise return false
20
21
  #
21
- def call(url)
22
+ def call(message)
23
+ url = message[:url]
22
24
  unless URI(url).absolute?
23
25
  url = (@base_url + url).to_s
24
26
  end
@@ -17,11 +17,12 @@ module DaimonSkycrawlers
17
17
  end
18
18
 
19
19
  #
20
- # @param [String] url
20
+ # @param [Hash] message
21
21
  # @param connection [Faraday]
22
22
  # @return [true|false] Return true when need update, otherwise return false
23
23
  #
24
- def call(url, connection: nil)
24
+ def call(message, connection: nil)
25
+ url = message[:url]
25
26
  unless URI(url).absolute?
26
27
  url = (@base_url + url).to_s
27
28
  end
@@ -1,3 +1,4 @@
1
+ require "securerandom"
1
2
  require "thor"
2
3
  require "rails/generators"
3
4
  require "rails/generators/actions"
@@ -16,11 +17,21 @@ module DaimonSkycrawlers
16
17
  end
17
18
 
18
19
  def create_files
20
+ config = {
21
+ password: SecureRandom.urlsafe_base64
22
+ }
19
23
  [
20
24
  "README.md",
21
25
  "config/database.yml",
26
+ "docker-compose.yml",
27
+ "env",
28
+ "env.db",
22
29
  ].each do |path|
23
- template("#{path}.erb", "#{name}/#{path}")
30
+ if path.start_with?("env")
31
+ template("#{path}.erb", "#{name}/.#{path}", config)
32
+ else
33
+ template("#{path}.erb", "#{name}/#{path}", config)
34
+ end
24
35
  end
25
36
  migration_options = {
26
37
  destination_root: File.join(destination_root, name),
@@ -55,15 +66,36 @@ module DaimonSkycrawlers
55
66
 
56
67
  def copy_files
57
68
  [
69
+ "Dockerfile",
70
+ "Dockerfile.db",
58
71
  "Gemfile",
59
72
  "Rakefile",
60
73
  "app/crawlers/sample_crawler.rb",
74
+ "app/filters/sample_filter.rb",
61
75
  "app/processors/sample_processor.rb",
62
76
  "config/init.rb",
77
+ "services/common/docker-entrypoint.sh",
78
+ "services/db/init-user-db.sh"
63
79
  ].each do |path|
64
80
  copy_file(path, "#{name}/#{path}", mode: :preserve)
65
81
  end
66
82
  end
83
+
84
+ def create_directories
85
+ [
86
+ "vendor/bundle",
87
+ "docker-cache/bundle",
88
+ "docker-cache/.bundle"
89
+ ].each do |entry|
90
+ empty_directory("#{name}/#{entry}")
91
+ end
92
+ end
93
+
94
+ def display_post_message
95
+ puts <<MESSAGE
96
+ Check .env and .env.db before run `docker-compose build` or `docker-compose up`.
97
+ MESSAGE
98
+ end
67
99
  end
68
100
 
69
101
  class MigrationGenerator < ActiveRecord::Generators::MigrationGenerator
@@ -0,0 +1,25 @@
1
+ FROM ruby:2.3.1-alpine
2
+
3
+ RUN apk --no-cache --update add build-base ruby-dev libxml2-dev postgresql-dev libcurl git
4
+
5
+ RUN adduser -D -h /home/crawler -g "DaimonSkycrawlers user" -s /bin/sh crawler crawler
6
+
7
+ ARG SKYCRAWLERS_ENV=production
8
+ ARG SKYCRAWLERS_MAIN=crawler
9
+ ENV SKYCRAWLERS_ENV=$SKYCRAWLERS_ENV \
10
+ SKYCRAWLERS_MAIN=$SKYCRAWLERS_MAIN \
11
+ BUNDLE_JOBS=4
12
+
13
+ USER crawler
14
+ WORKDIR /home/crawler
15
+ COPY ./Gemfile* ./
16
+
17
+ RUN if [ "$SKYCRAWLERS_ENV" = "production" ]; then \
18
+ bundle install --without development:test; \
19
+ fi
20
+
21
+ COPY . .
22
+
23
+ ADD services/common/docker-entrypoint.sh /docker-entrypoint.sh
24
+ ENTRYPOINT ["/docker-entrypoint.sh"]
25
+ CMD ["$SKYCRAWLERS_MAIN"]
@@ -0,0 +1,6 @@
1
+ FROM postgres:9.5.4
2
+
3
+ RUN localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
4
+ ENV LANG ja_JP.UTF-8
5
+
6
+ ADD services/db/init-user-db.sh /docker-entrypoint-initdb.d/init-user-db.sh
@@ -48,3 +48,37 @@ $ bin/enqueue response http://example.com/
48
48
  ```
49
49
 
50
50
  Display `It works with 'http://example.com'` again on your terminal which runs your processor.
51
+
52
+ ## Usage with docker-compose
53
+
54
+ 1. Build docker images
55
+
56
+ ```
57
+ $ docker-compose build
58
+ ```
59
+
60
+ 2. Run docker containers
61
+
62
+ ```
63
+ $ docker-compose up -d
64
+ ```
65
+
66
+ 3. Run a command on docker containers
67
+
68
+ ```
69
+ $ docker-compose exec <service name> <command>
70
+ ```
71
+
72
+ For example,
73
+
74
+ ```
75
+ $ docker-compose exec <%= name %>-db bash
76
+ $ docker-compose exec <%= name %>-crawler sh
77
+ ```
78
+
79
+ 4. Shutdown docker containers
80
+
81
+ ```
82
+ $ docker-compose down
83
+ $ docker-compose down --rmi all # Remove all related images
84
+ ```
@@ -0,0 +1,9 @@
1
+ require "daimon_skycrawlers/filter/base"
2
+
3
+ class SampleFilter < DaimonSkycrawlers::Filter::Base
4
+ def call(message)
5
+ # Imprement your filter here.
6
+ # If you want to crawl `url`, return true otherwise false.
7
+ true
8
+ end
9
+ end
@@ -4,6 +4,7 @@ default: &default
4
4
  adapter: postgresql
5
5
  encoding: unicode
6
6
  pool: 5
7
+ url: <%%= ENV['DATABASE_URL'] %>
7
8
 
8
9
  development:
9
10
  <<: *default
@@ -6,16 +6,22 @@ require "daimon_skycrawlers/queue"
6
6
  DaimonSkycrawlers.configure do |config|
7
7
  config.logger = DaimonSkycrawlers::Logger.default
8
8
  config.crawler_interval = 1
9
+ config.shutdown_interval = 300
9
10
  end
10
11
 
11
12
  DaimonSkycrawlers::Queue.configure do |config|
12
- # queue configuration
13
+ if ENV["CLOUDAMQP_URL"]
14
+ amqp_uri = URI(ENV["CLOUDAMQP_URL"])
15
+ config.host = amqp_uri.host
16
+ config.username = amqp_uri.user
17
+ config.password = amqp_uri.password
18
+ config.vhost = amqp_uri.user
19
+ else
20
+ config.port = 5672
21
+ config.host = ENV["SKYCRAWLERS_RABBITMQ_HOST"] || "localhost"
22
+ config.vhost = "/"
23
+ end
13
24
  config.logger = DaimonSkycrawlers.configuration.logger
14
- config.host = "127.0.0.1"
15
- config.port = 5672
16
- # config.username = 'guest'
17
- # config.password = 'guest'
18
- config.vhost = "/"
19
25
  config.max_reconnect_attempts = 10
20
26
  config.network_recovery_interval = 1.0
21
27
  end
@@ -0,0 +1,35 @@
1
+ version: "2"
2
+ services:
3
+ <%= name %>-rabbitmq:
4
+ image: rabbitmq
5
+
6
+ <%= name %>-db:
7
+ build:
8
+ context: .
9
+ dockerfile: Dockerfile.db
10
+ env_file: .env.db
11
+
12
+ <%= name %>-common: &common
13
+ build:
14
+ context: .
15
+ args:
16
+ - SKYCRAWLERS_ENV=development
17
+ links:
18
+ - <%= name %>-rabbitmq
19
+ - <%= name %>-db
20
+ volumes:
21
+ - ./:/home/crawler
22
+ - ./docker-cache/.bundle:/home/crawler/.bundle
23
+ - ./docker-cache/bundle:/home/crawler/vendor/bundle
24
+ working_dir: /home/crawler
25
+ env_file: .env
26
+
27
+ <%= name %>-crawler:
28
+ <<: *common
29
+ command: crawler
30
+
31
+ <%= name %>-processor:
32
+ <<: *common
33
+ depends_on:
34
+ - <%= name %>-crawler
35
+ command: processor
@@ -0,0 +1,5 @@
1
+ POSTGRES_USER=postgres
2
+ POSTGRES_PASSWORD=<%= config[:password] %>
3
+ DATABASE_USER=crawler
4
+ DATABASE_PASSWORD=<%= config[:password] %>
5
+ DATABASE_PREFIX=<%= name %>
@@ -0,0 +1,2 @@
1
+ SKYCRAWLERS_RABBITMQ_HOST=<%= name %>-rabbitmq
2
+ DATABASE_URL=postgres://crawler:<%= config[:password] %>@<%= name %>-db/xxx_development
@@ -0,0 +1,30 @@
1
+ #!/bin/sh
2
+
3
+ set -x
4
+
5
+ MAIN=$1
6
+ case $MAIN in
7
+ crawler)
8
+ bundle check || bundle install --retry=3 --path=vendor/bundle \
9
+ && bundle exec rake db:schema:load || bundle exec rake db:migrate
10
+ bundle exec daimon_skycrawlers exec $MAIN
11
+ ;;
12
+ processor)
13
+ while [ ! -e Gemfile.lock ]; do
14
+ sleep 5
15
+ done
16
+ bundle check || bundle install --retry=3 --path=vendor/bundle \
17
+ && bundle exec rake db:schema:load || bundle exec rake db:migrate
18
+ bundle exec daimon_skycrawlers exec $MAIN
19
+ ;;
20
+ setup)
21
+ bundle install --path=vendor/bundle
22
+ bundle exec rake db:schema:load
23
+ ;;
24
+ none)
25
+ echo NOP
26
+ ;;
27
+ sleep)
28
+ sleep 1d
29
+ ;;
30
+ esac
@@ -0,0 +1,9 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ createuser -e -U $POSTGRES_USER -d $DATABASE_USER
6
+ createdb -e -U $POSTGRES_USER -E UTF-8 -O $DATABASE_USER $DATABASE_USER
7
+ createdb -e -U $POSTGRES_USER -E UTF-8 -O $DATABASE_USER ${DATABASE_PREFIX}_development
8
+ createdb -e -U $POSTGRES_USER -E UTF-8 -O $DATABASE_USER ${DATABASE_PREFIX}_test
9
+ psql -U postgres -c "ALTER ROLE $DATABASE_USER WITH PASSWORD '$DATABASE_PASSWORD';"
@@ -12,7 +12,9 @@ module DaimonSkycrawlers
12
12
  # @param process_name [String] Process name
13
13
  #
14
14
  def run(process_name: default_process_name)
15
- DaimonSkycrawlers::Timer.setup_shutdown_timer(config.queue_name_prefix, interval: config.shutdown_interval)
15
+ if config.shutdown_interval > 0
16
+ DaimonSkycrawlers::Timer.setup_shutdown_timer(config.queue_name_prefix, interval: config.shutdown_interval)
17
+ end
16
18
  SongkickQueue::Worker.new(process_name, [DaimonSkycrawlers::Consumer::HTTPResponse]).run
17
19
  end
18
20
 
@@ -21,7 +21,7 @@ module DaimonSkycrawlers
21
21
  end
22
22
 
23
23
  def process(message)
24
- return unless apply_before_filters(message[:url])
24
+ return unless apply_before_filters(message)
25
25
  call(message)
26
26
  end
27
27
 
@@ -35,9 +35,9 @@ module DaimonSkycrawlers
35
35
 
36
36
  private
37
37
 
38
- def apply_before_filters(url)
38
+ def apply_before_filters(message)
39
39
  @before_process_filters.all? do |filter|
40
- filter.call(url)
40
+ filter.call(message)
41
41
  end
42
42
  end
43
43
  end
@@ -0,0 +1,16 @@
1
+ require "daimon_skycrawlers/processor/base"
2
+
3
+ module DaimonSkycrawlers
4
+ module Processor
5
+ class Proc < Base
6
+ def initialize(handler)
7
+ super()
8
+ @handler = handler
9
+ end
10
+
11
+ def call(message)
12
+ @handler.call(message)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -24,6 +24,8 @@
24
24
  # https://github.com/janko-m/sinatra-activerecord
25
25
  #
26
26
 
27
+ require "erb"
28
+
27
29
  seed_loader = Class.new do
28
30
  def load_seed
29
31
  # load "#{ActiveRecord::Tasks::DatabaseTasks.db_dir}/seeds.rb"
@@ -1,3 +1,3 @@
1
1
  module DaimonSkycrawlers
2
- VERSION = "0.8.0"
2
+ VERSION = "0.9.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: daimon_skycrawlers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - daimon developers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-01 00:00:00.000000000 Z
11
+ date: 2016-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -328,18 +328,27 @@ files:
328
328
  - lib/daimon_skycrawlers/generator/new.rb
329
329
  - lib/daimon_skycrawlers/generator/processor.rb
330
330
  - lib/daimon_skycrawlers/generator/templates/crawler.rb.erb
331
+ - lib/daimon_skycrawlers/generator/templates/new/Dockerfile
332
+ - lib/daimon_skycrawlers/generator/templates/new/Dockerfile.db
331
333
  - lib/daimon_skycrawlers/generator/templates/new/Gemfile
332
334
  - lib/daimon_skycrawlers/generator/templates/new/README.md.erb
333
335
  - lib/daimon_skycrawlers/generator/templates/new/Rakefile
334
336
  - lib/daimon_skycrawlers/generator/templates/new/app/crawlers/sample_crawler.rb
337
+ - lib/daimon_skycrawlers/generator/templates/new/app/filters/sample_filter.rb
335
338
  - lib/daimon_skycrawlers/generator/templates/new/app/processors/sample_processor.rb
336
339
  - lib/daimon_skycrawlers/generator/templates/new/config/database.yml.erb
337
340
  - lib/daimon_skycrawlers/generator/templates/new/config/init.rb
341
+ - lib/daimon_skycrawlers/generator/templates/new/docker-compose.yml.erb
342
+ - lib/daimon_skycrawlers/generator/templates/new/env.db.erb
343
+ - lib/daimon_skycrawlers/generator/templates/new/env.erb
344
+ - lib/daimon_skycrawlers/generator/templates/new/services/common/docker-entrypoint.sh
345
+ - lib/daimon_skycrawlers/generator/templates/new/services/db/init-user-db.sh
338
346
  - lib/daimon_skycrawlers/generator/templates/processor.rb.erb
339
347
  - lib/daimon_skycrawlers/logger.rb
340
348
  - lib/daimon_skycrawlers/processor.rb
341
349
  - lib/daimon_skycrawlers/processor/base.rb
342
350
  - lib/daimon_skycrawlers/processor/default.rb
351
+ - lib/daimon_skycrawlers/processor/proc.rb
343
352
  - lib/daimon_skycrawlers/processor/spider.rb
344
353
  - lib/daimon_skycrawlers/queue.rb
345
354
  - lib/daimon_skycrawlers/sitemap_parser.rb