wovnrb 3.5.0 → 3.6.0

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.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/README.en.md +30 -13
  3. data/build.sh +7 -0
  4. data/docker/nginx/Dockerfile +18 -0
  5. data/docker/nginx/README.md +13 -0
  6. data/docker/nginx/build.sh +8 -0
  7. data/docker/nginx/scripts/configure_sshd.sh +25 -0
  8. data/docker/nginx/scripts/startup.sh +10 -0
  9. data/docker/nginx/wovnrb.conf +19 -0
  10. data/docker/rails/Dockerfile +9 -0
  11. data/docker/rails/Dockerfile.ECS +17 -0
  12. data/docker/rails/TestSite/Gemfile +0 -2
  13. data/docker/rails/TestSite/app/controllers/custom_response_controller.rb +1 -1
  14. data/docker/rails/TestSite/config/environments/development.rb +2 -0
  15. data/docker/rails/TestSite/config/environments/production.rb +2 -0
  16. data/docker/rails/TestSite/config/environments/test.rb +2 -0
  17. data/docker/rails/TestSite/public/index.html +1 -1
  18. data/docker/rails/TestSite/start.sh +2 -11
  19. data/docker/rails/TestSite/start_rails.sh +9 -0
  20. data/docker/rails/TestSite/yarn.lock +3 -3
  21. data/docker/scripts/jenkins/build.sh +45 -0
  22. data/docker/scripts/jenkins/tag_and_push_image.sh +30 -0
  23. data/docker/scripts/jenkins/taskdef.json +104 -0
  24. data/docker/scripts/jenkins/taskdef.json.bak +99 -0
  25. data/lib/wovnrb/api_translator.rb +6 -1
  26. data/lib/wovnrb/headers.rb +19 -2
  27. data/lib/wovnrb/services/html_converter.rb +17 -1
  28. data/lib/wovnrb/services/url.rb +136 -0
  29. data/lib/wovnrb/store.rb +8 -2
  30. data/lib/wovnrb/url_language_switcher.rb +124 -0
  31. data/lib/wovnrb/version.rb +1 -1
  32. data/lib/wovnrb.rb +3 -1
  33. data/test/lib/api_translator_test.rb +44 -0
  34. data/test/lib/services/html_converter_test.rb +210 -37
  35. data/test/lib/services/url_test.rb +308 -0
  36. data/test/lib/url_language_switcher_test.rb +798 -0
  37. data/test/lib/wovnrb_test.rb +2 -1
  38. data/test/test_helper.rb +4 -1
  39. metadata +22 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 13d349b3045beb3370a29aca8ebe22f93fdcdeb143a7fefe0f4ecb031b8ffda9
4
- data.tar.gz: da704d4f640423bc7a5c85151d3e531e95d564949812a032a925326b3a278219
3
+ metadata.gz: 29bd88528d91b54ec9a05a04618c94466ecc514b32964c6a771a4a8b3f2e5578
4
+ data.tar.gz: aa3c23a353b77ccb3abc93036e88b42f4794d1ea983af8b6b36a0287f2665c6a
5
5
  SHA512:
6
- metadata.gz: de57bbecbd55635636928d9de85a7e3e196098476684cdac3cc1f6f399434543dfd7cc7afa0cb947676cd9403c37d9122d82fa1c60dd20a304cf4cb3e5481ad4
7
- data.tar.gz: aa54a84bb9b8a4d42126283ba7ca17c00214c6daf745132c1f7a4c4b50407772e8b6c8bd141f483e8d1b95b02ba3181e047a6ee51b0898daec75b688ed32881a
6
+ metadata.gz: 391f38b423bc709f052a33515452a04202c507060d7fb24fe202d3eb7788fb646a114b5258065f896bbd540d4e3187ccc29510f1b6b0744ceea45f6372e8b533
7
+ data.tar.gz: 43175960da9790a1ced786d357469f2c590b530add67b4e8a938deacbf9be45b70f917c1ef26279432e6dbb9ad7b99cc889aa07ebe5ece177e7c30bc1677727f
data/README.en.md CHANGED
@@ -74,19 +74,22 @@ After completing setup, start the Ruby Application, and make sure the WOVN.io li
74
74
 
75
75
  The following is a list of the WOVN.io Ruby Library's valid parameters.
76
76
 
77
- Parameter Name | Required | Default Setting
78
- ----------------------| -------- | ----------------
79
- project_token | yes | ''
80
- default_lang | yes | 'ja'
81
- supported_langs | yes | ['ja', 'en']
82
- url_pattern | yes | 'path'
83
- lang_param_name | | 'wovn'
84
- query | | []
85
- ignore_class | | []
86
- translate_fragment | | true
87
- ignore_paths | | []
88
- install_middleware | | true
89
- compress_api_requests | | true
77
+ Parameter Name | Required | Default Setting
78
+ -------------------------------| -------- | ----------------
79
+ project_token | yes | ''
80
+ default_lang | yes | 'ja'
81
+ supported_langs | yes | ['ja', 'en']
82
+ url_pattern | yes | 'path'
83
+ lang_param_name | | 'wovn'
84
+ query | | []
85
+ ignore_class | | []
86
+ translate_fragment | | true
87
+ ignore_paths | | []
88
+ install_middleware | | true
89
+ compress_api_requests | | true
90
+ api_timeout_seconds | | 1.0
91
+ api_timeout_search_engine_bots | | 5.0
92
+ translate_canonical_tag | | true
90
93
 
91
94
  ### 2.1. project_token
92
95
 
@@ -201,3 +204,17 @@ WOVN.rb needs to be added after any compression middleware.
201
204
  ### 2.11 compress_api_requests
202
205
 
203
206
  By default, requests to the translation API will be sent with gzip compression. Set to false to disable compression.
207
+
208
+ ### 2.12 api_timeout_seconds
209
+ Configures the amount of time in seconds wovnrb will wait for the translation API for a response before the
210
+ request is considered timed-out. This setting defaults to `1.0`.
211
+
212
+ ### 2.13 api_timeout_search_engine_bots
213
+ Similar to `api_timeout_seconds`, this timeout setting is applied when handling requests made by search engine bots.
214
+ Currently, bots from Google, Yahoo, Bing, Yandex, DuckDuckGo and Baidu are supported. This setting
215
+ defaults to `5.0`.
216
+
217
+ ### 2.14 translate_canonical_tag
218
+ Configures if wovnrb should automatically translate existing canonical tag in the HTML. When set to `true`, wovnrb
219
+ will translate the canonical URL with the current language code according to your `url_pattern` setting.
220
+ This setting defaults to `true`.
data/build.sh ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env bash
2
+ set -eux
3
+
4
+ TAG=$1
5
+ cd $(dirname $0)
6
+ docker build -t "${TAG}" -f docker/rails/Dockerfile.ECS .
7
+ cd -
@@ -0,0 +1,18 @@
1
+ FROM nginx:stable
2
+
3
+ WORKDIR /var/tmp/nginx
4
+
5
+ ADD wovnrb.conf .
6
+ ADD scripts/startup.sh .
7
+ ADD scripts/configure_sshd.sh .
8
+
9
+ RUN apt-get update --allow-releaseinfo-change \
10
+ && apt install --no-install-recommends -y \
11
+ vim \
12
+ && apt-get clean \
13
+ && rm -rf /var/lib/apt/lists/*
14
+
15
+ # Setup sshd
16
+ RUN ./configure_sshd.sh
17
+
18
+ CMD ["/var/tmp/nginx/startup.sh"]
@@ -0,0 +1,13 @@
1
+ Update `nginx/{ENV_ID}/config`.
2
+ And build new image.
3
+
4
+
5
+ ## How to Build
6
+
7
+ *Notice*
8
+ You need aws credentials `wovn-code-pipeline` for building image.
9
+ If you need it, please contact to Infrastructure Team.
10
+
11
+ ```
12
+ ./build.sh
13
+ ```
@@ -0,0 +1,8 @@
1
+ #!/bin/bash
2
+ set -eux
3
+
4
+ TAG="${1}"
5
+ cd $(dirname $0)
6
+ docker build -t ${TAG} .
7
+
8
+ cd -
@@ -0,0 +1,25 @@
1
+ #!/bin/bash
2
+ set -eu
3
+
4
+ # Install openssh-server
5
+ apt-get update --allow-releaseinfo-change \
6
+ && apt install --no-install-recommends -y \
7
+ openssh-server \
8
+ && apt-get clean \
9
+ && rm -rf /var/lib/apt/lists/*
10
+
11
+ # Update sshd_config
12
+ echo -e "Port 22\n" >> /etc/ssh/sshd_config
13
+ echo -e "AllowUsers ec2-user\n" >> /etc/ssh/sshd_config
14
+ echo -e "AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 /etc/authorized_keys/%u\n" >> /etc/ssh/sshd_config
15
+ mkdir /etc/authorized_keys
16
+
17
+ # Setup user and authorized_keys
18
+ useradd -m -d /home/ec2-user -s /bin/bash ec2-user
19
+ echo "ec2-user:$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 64 | head -n 1)" | chpasswd
20
+ echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCp1wkFbEfS2CuUwSMJy5zx3SenZF6WOL0o60ngHYJ0bHWEe7e7KCdwkyKkgF8A57in2faI+nKO0ScnAYcuwEy5BJNh6789TEdNtC4mpKr7A5x0MEkAdWyjjQu/upsaDASSEmJO8dFV/xu/IEUticxA960Rz2ncOPRHFubnbFkCOUg2vy8dfZybx1d9bZWEdDrcnPFjhhxeti+Cq/OdwtTlteffUKhi7qcDKHZEGi3zHzrvXiSwKJHgyMdUNf/PzIV+9Z0G0XwrnZ/q6WQNESNaEra7Iwvl921hzlxP8RKDCaxsryAHR67BCJjqhok7qtnujQYWMNc40z1ewC0o+oat" > /etc/authorized_keys/ec2-user
21
+
22
+ # Add ec2-user to wheel group
23
+ groupadd -g 999 wheel
24
+ sed -i -e 's/wheel:x:999:/wheel:x:999:root,ec2-user/g' /etc/group
25
+ sed -i -e 's/^# auth required pam_wheel.so/auth sufficient pam_wheel.so trust/g' /etc/pam.d/su
@@ -0,0 +1,10 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ # Add port for sshd
5
+ echo "Port 40022" >> /etc/ssh/sshd_config
6
+ service ssh restart
7
+
8
+ cp -a /var/tmp/nginx/wovnrb.conf /etc/nginx/conf.d/
9
+
10
+ nginx -g 'daemon off;'
@@ -0,0 +1,19 @@
1
+ map $http_user_agent $check_ua {
2
+ ~ELB-HealthChecker/ 0;
3
+ default 1;
4
+ }
5
+
6
+ server {
7
+ listen 80 default_server;
8
+ server_name wovn.io;
9
+
10
+ location / {
11
+ proxy_pass http://localhost:4000;
12
+ proxy_http_version 1.1;
13
+ proxy_set_header Upgrade $http_upgrade;
14
+ proxy_set_header Connection 'upgrade';
15
+ proxy_set_header Host $host;
16
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
17
+ proxy_cache_bypass $http_upgrade;
18
+ }
19
+ }
@@ -3,4 +3,13 @@ FROM ruby:2.6.5
3
3
  WORKDIR /usr/src/app
4
4
 
5
5
  COPY ./TestSite/ .
6
+
7
+ RUN gem update --system
8
+ RUN gem uninstall bundler && rm /usr/local/bin/bundle && rm /usr/local/bin/bundler
9
+ RUN gem install bundler:2.1.4
10
+ RUN apt update && apt install npm -y
11
+ RUN npm install --global yarn
12
+ RUN yarn install --check-files
13
+ RUN bundle install
14
+
6
15
  CMD ["/bin/bash", "start.sh"]
@@ -0,0 +1,17 @@
1
+ FROM ruby:2.6.5
2
+
3
+ WORKDIR /usr/src/app
4
+
5
+ COPY docker/rails/TestSite .
6
+ COPY lib ./wovnrb/lib
7
+ COPY Gemfile ./wovnrb/
8
+ COPY wovnrb.gemspec ./wovnrb/
9
+
10
+ RUN gem update --system && gem uninstall bundler && \
11
+ rm /usr/local/bin/bundle && rm /usr/local/bin/bundler
12
+ RUN gem install bundler:2.1.4 && bundle install
13
+ RUN apt update -y && apt install npm -y && apt-get install openssh-server -y && apt-get install vim -y
14
+ RUN npm install --global yarn
15
+ RUN yarn install --check-files
16
+
17
+ CMD ["/bin/bash", "start_rails.sh"]
@@ -52,5 +52,3 @@ end
52
52
 
53
53
  # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
54
54
  gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
55
-
56
- gem 'wovnrb', path: './wovnrb'
@@ -1,5 +1,5 @@
1
1
  class CustomResponseController < ApplicationController
2
- skip_before_action :verify_authenticity_token2
2
+ skip_before_action :verify_authenticity_token
3
3
 
4
4
  def make_response
5
5
  response_args_json = params[:response]
@@ -59,4 +59,6 @@ Rails.application.configure do
59
59
  # Use an evented file watcher to asynchronously detect changes in source code,
60
60
  # routes, locales, etc. This feature depends on the listen gem.
61
61
  config.file_watcher = ActiveSupport::EventedFileUpdateChecker
62
+
63
+ config.hosts << "example.com"
62
64
  end
@@ -109,4 +109,6 @@ Rails.application.configure do
109
109
  # config.active_record.database_selector = { delay: 2.seconds }
110
110
  # config.active_record.database_resolver = ActiveRecord::Middleware::DatabaseSelector::Resolver
111
111
  # config.active_record.database_resolver_context = ActiveRecord::Middleware::DatabaseSelector::Resolver::Session
112
+
113
+ config.hosts << "example.com"
112
114
  end
@@ -46,4 +46,6 @@ Rails.application.configure do
46
46
 
47
47
  # Raises error for missing translations.
48
48
  # config.action_view.raise_on_missing_translations = true
49
+
50
+ config.hosts << "example.com"
49
51
  end
@@ -4,6 +4,6 @@
4
4
  <title>test</title>
5
5
  </head>
6
6
  <body>
7
- <h1>Hello WOVN.php world!</h1>
7
+ <h1>Hello WOVN.rb world!</h1>
8
8
  </body>
9
9
  </html>
@@ -1,13 +1,4 @@
1
- cd /usr/src/app
2
- gem update --system
3
- gem uninstall bundler
4
- rm /usr/local/bin/bundle
5
- rm /usr/local/bin/bundler
6
- gem install bundler:2.1.4
7
- update --bundler
1
+ # ./wovnrb should not be cached
2
+ echo "gem 'wovnrb', path: './wovnrb'" >> Gemfile
8
3
  bundle install
9
- apt update
10
- apt install npm -y
11
- npm install --global yarn
12
- yarn install --check-files
13
4
  bin/rails server -b 0.0.0.0 -e development -p 4000
@@ -0,0 +1,9 @@
1
+ mkdir /root/.ssh
2
+ touch /root/.ssh/authorized_keys
3
+ echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCp1wkFbEfS2CuUwSMJy5zx3SenZF6WOL0o60ngHYJ0bHWEe7e7KCdwkyKkgF8A57in2faI+nKO0ScnAYcuwEy5BJNh6789TEdNtC4mpKr7A5x0MEkAdWyjjQu/upsaDASSEmJO8dFV/xu/IEUticxA960Rz2ncOPRHFubnbFkCOUg2vy8dfZybx1d9bZWEdDrcnPFjhhxeti+Cq/OdwtTlteffUKhi7qcDKHZEGi3zHzrvXiSwKJHgyMdUNf/PzIV+9Z0G0XwrnZ/q6WQNESNaEra7Iwvl921hzlxP8RKDCaxsryAHR67BCJjqhok7qtnujQYWMNc40z1ewC0o+oat" > /root/.ssh/authorized_keys
4
+ echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK8M0XAzp2KYW6pA4dmoRmC5jpfGqotxMTUXuUVTyCBc" >> /root/.ssh/authorized_keys
5
+ echo "AuthorizedKeysFile .ssh/authorized_keys" >> /etc/ssh/sshd_config
6
+ echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
7
+ echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config
8
+ service ssh start
9
+ bin/rails server -b 0.0.0.0 -e development -p 4000
@@ -3094,9 +3094,9 @@ flush-write-stream@^1.0.0:
3094
3094
  readable-stream "^2.3.6"
3095
3095
 
3096
3096
  follow-redirects@^1.0.0:
3097
- version "1.14.0"
3098
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.0.tgz#f5d260f95c5f8c105894491feee5dc8993b402fe"
3099
- integrity sha512-0vRwd7RKQBTt+mgu87mtYeofLFZpTas2S9zY+jIeuLJMNvudIgF52nr19q40HOwH5RrhWIPuj9puybzSJiRrVg==
3097
+ version "1.14.7"
3098
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685"
3099
+ integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==
3100
3100
 
3101
3101
  for-in@^1.0.2:
3102
3102
  version "1.0.2"
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env bash
2
+ set -eux
3
+ export AWS_PROFILE="wovn-code-staging-pipeline"
4
+ export AWS_REGION="us-west-2"
5
+ export ECR_HOST="257024234524.dkr.ecr.us-west-2.amazonaws.com"
6
+ REPO_NAME_WOVNRB="wovnrb"
7
+ REPO_NAME_NGINX="wovnrb-nginx"
8
+ CLUSTER_NAME="wovn-library-testing"
9
+ TASKDEF_FAMILY_NAME="wovnrb"
10
+ ECS_SERVICE_NAME="wovnrb"
11
+ PROJECT_DIR=$(dirname "$0")/../../..
12
+
13
+ commit_hash=$(git rev-parse --short HEAD)
14
+ image_tag="${commit_hash}"
15
+
16
+ sh ${PROJECT_DIR}/build.sh "${REPO_NAME_WOVNRB}":"${image_tag}"
17
+ sh ${PROJECT_DIR}/docker/nginx/build.sh "${REPO_NAME_NGINX}":"${image_tag}"
18
+
19
+ source ${PROJECT_DIR}/docker/scripts/jenkins/tag_and_push_image.sh
20
+
21
+ set +x
22
+ $(aws ecr get-login --no-include-email --region "${AWS_REGION}" --profile "${AWS_PROFILE}")
23
+ set -x
24
+
25
+ tag_and_push_image "${AWS_REGION}" "${REPO_NAME_WOVNRB}" "${image_tag}" "staging"
26
+ tag_and_push_image "${AWS_REGION}" "${REPO_NAME_NGINX}" "${image_tag}" "staging"
27
+
28
+ sed -i "s#wovnrb:latest#"${REPO_NAME_WOVNRB}":"${image_tag}"#g" ${PROJECT_DIR}/docker/scripts/jenkins/taskdef.json
29
+ sed -i "s#wovnrb-nginx:latest#"${REPO_NAME_NGINX}":"${image_tag}"#g" ${PROJECT_DIR}/docker/scripts/jenkins/taskdef.json
30
+
31
+ cd ${PROJECT_DIR}/docker/scripts/jenkins/
32
+ TASKDEF_REVISION=$(aws ecs register-task-definition \
33
+ --profile "${AWS_PROFILE}" --region "${AWS_REGION}" \
34
+ --cli-input-json file://$(pwd)/taskdef.json \
35
+ | jq ."taskDefinition.revision")
36
+ echo "${TASKDEF_REVISION}"
37
+
38
+ echo "Start ECS Rolling deploy. Update ${ECS_SERVICE_NAME} by ${TASKDEF_FAMILY_NAME}:${TASKDEF_REVISION}"
39
+ aws ecs update-service \
40
+ --profile "${AWS_PROFILE}" --region "${AWS_REGION}" \
41
+ --cluster "${CLUSTER_NAME}" \
42
+ --service "${ECS_SERVICE_NAME}" \
43
+ --task-definition "${TASKDEF_FAMILY_NAME}:${TASKDEF_REVISION}"
44
+
45
+ cd -
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Tag to docker image and push it to specified ECR
4
+ #
5
+ # Required environment variables:
6
+ # - AWS_PROFILE (AWS profile authorized for ECR login and S3 release)
7
+ #
8
+ # Args:
9
+ # - region: ECR region (e.g. us-west-1 | us-west-2 )
10
+ # - image-name: docker image name (e.g. equalizer-nginx)
11
+ # - tag: docker image tag. we use git commit hash ordinary (git rev-parse --short HEAD)
12
+
13
+ tag_and_push_image() {
14
+ local aws_region="${1}"
15
+ local image_name="${2}"
16
+ local tag="${3}"
17
+ local account="${4}"
18
+
19
+ if [ ${account} == "production" ]; then
20
+ local ecr_host="140249473629.dkr.ecr.${aws_region}.amazonaws.com"
21
+ elif [ ${account} == "staging" ]; then
22
+ local ecr_host="257024234524.dkr.ecr.${aws_region}.amazonaws.com"
23
+ else
24
+ echo "Passed account not recognized"
25
+ local ecr_host=""
26
+ fi
27
+
28
+ docker tag ${image_name}:${tag} ${ecr_host}/${image_name}:${tag}
29
+ docker push ${ecr_host}/${image_name}:${tag}
30
+ }
@@ -0,0 +1,104 @@
1
+ {
2
+ "executionRoleArn": "arn:aws:iam::257024234524:role/ecsTaskExecutionRole",
3
+ "containerDefinitions": [
4
+ {
5
+ "name": "wovnrb-nginx",
6
+ "cpu": 0,
7
+ "image": "257024234524.dkr.ecr.us-west-2.amazonaws.com/wovnrb-nginx:latest",
8
+ "mountPoints": [],
9
+ "ulimits": [
10
+ {
11
+ "name": "nofile",
12
+ "softLimit": 65535,
13
+ "hardLimit": 65535
14
+ }
15
+ ],
16
+ "logConfiguration": {
17
+ "logDriver": "awslogs",
18
+ "options": {
19
+ "awslogs-group": "/ecs/wovnrb",
20
+ "awslogs-region": "us-west-2",
21
+ "awslogs-stream-prefix": "ecs"
22
+ }
23
+ },
24
+ "essential": true,
25
+ "portMappings": [
26
+ {
27
+ "hostPort": 80,
28
+ "protocol": "tcp",
29
+ "containerPort": 80
30
+ },
31
+ {
32
+ "hostPort": 40022,
33
+ "protocol": "tcp",
34
+ "containerPort": 40022
35
+ }
36
+ ],
37
+ "stopTimeout": 120,
38
+ "dependsOn": [
39
+ {
40
+ "containerName": "wovnrb",
41
+ "condition": "HEALTHY"
42
+ }
43
+ ]
44
+ },
45
+ {
46
+ "name": "wovnrb",
47
+ "cpu": 0,
48
+ "image": "257024234524.dkr.ecr.us-west-2.amazonaws.com/wovnrb:latest",
49
+ "mountPoints": [],
50
+ "workingDirectory": "/usr/src/app",
51
+ "linuxParameters": {
52
+ "initProcessEnabled": true
53
+ },
54
+ "environment": [],
55
+ "ulimits": [
56
+ {
57
+ "name": "nofile",
58
+ "softLimit": 65535,
59
+ "hardLimit": 65535
60
+ }
61
+ ],
62
+ "logConfiguration": {
63
+ "logDriver": "awslogs",
64
+ "options": {
65
+ "awslogs-group": "/ecs/wovnrb",
66
+ "awslogs-region": "us-west-2",
67
+ "awslogs-stream-prefix": "ecs"
68
+ }
69
+ },
70
+ "portMappings": [
71
+ {
72
+ "hostPort": 4000,
73
+ "protocol": "tcp",
74
+ "containerPort": 4000
75
+ },
76
+ {
77
+ "hostPort": 22,
78
+ "protocol": "tcp",
79
+ "containerPort": 22
80
+ }
81
+ ],
82
+ "volumesFrom": [],
83
+ "stopTimeout": 120,
84
+ "healthCheck": {
85
+ "retries": 3,
86
+ "command": [
87
+ "CMD-SHELL",
88
+ "curl -f http://localhost:4000/ || exit 1"
89
+ ],
90
+ "timeout": 20,
91
+ "interval": 60,
92
+ "startPeriod": 180
93
+ },
94
+ "essential": true
95
+ }
96
+ ],
97
+ "placementConstraints": [],
98
+ "cpu": "1024",
99
+ "memory": "2048",
100
+ "requiresCompatibilities": [ "FARGATE" ],
101
+ "family": "wovnrb",
102
+ "networkMode": "awsvpc",
103
+ "volumes": []
104
+ }
@@ -0,0 +1,99 @@
1
+ {
2
+ "executionRoleArn": "arn:aws:iam::257024234524:role/ecsTaskExecutionRole",
3
+ "containerDefinitions": [
4
+ {
5
+ "name": "wovnrb-nginx",
6
+ "cpu": 0,
7
+ "image": "257024234524.dkr.ecr.us-west-2.amazonaws.com/wovnrb-nginx:latest",
8
+ "mountPoints": [],
9
+ "ulimits": [
10
+ {
11
+ "name": "nofile",
12
+ "softLimit": 65535,
13
+ "hardLimit": 65535
14
+ }
15
+ ],
16
+ "logConfiguration": {
17
+ "logDriver": "awslogs",
18
+ "options": {
19
+ "awslogs-group": "/ecs/wovnrb",
20
+ "awslogs-region": "us-west-2",
21
+ "awslogs-stream-prefix": "ecs"
22
+ }
23
+ },
24
+ "essential": true,
25
+ "portMappings": [
26
+ {
27
+ "hostPort": 80,
28
+ "protocol": "tcp",
29
+ "containerPort": 80
30
+ },
31
+ {
32
+ "hostPort": 40022,
33
+ "protocol": "tcp",
34
+ "containerPort": 40022
35
+ }
36
+ ],
37
+ "stopTimeout": 120,
38
+ "dependsOn": [
39
+ {
40
+ "containerName": "wovnrb",
41
+ "condition": "HEALTHY"
42
+ }
43
+ ]
44
+ },
45
+ {
46
+ "name": "wovnrb",
47
+ "cpu": 0,
48
+ "image": "257024234524.dkr.ecr.us-west-2.amazonaws.com/wovnrb:36d9648",
49
+ "mountPoints": [],
50
+ "workingDirectory": "/usr/src/app",
51
+ "linuxParameters": {
52
+ "initProcessEnabled": true
53
+ },
54
+ "environment": [],
55
+ "ulimits": [
56
+ {
57
+ "name": "nofile",
58
+ "softLimit": 65535,
59
+ "hardLimit": 65535
60
+ }
61
+ ],
62
+ "logConfiguration": {
63
+ "logDriver": "awslogs",
64
+ "options": {
65
+ "awslogs-group": "/ecs/wovnrb",
66
+ "awslogs-region": "us-west-2",
67
+ "awslogs-stream-prefix": "ecs"
68
+ }
69
+ },
70
+ "portMappings": [
71
+ {
72
+ "hostPort": 4000,
73
+ "protocol": "tcp",
74
+ "containerPort": 4000
75
+ }
76
+ ],
77
+ "volumesFrom": [],
78
+ "stopTimeout": 120,
79
+ "healthCheck": {
80
+ "retries": 3,
81
+ "command": [
82
+ "CMD-SHELL",
83
+ "curl -f http://localhost:4000/ || exit 1"
84
+ ],
85
+ "timeout": 20,
86
+ "interval": 60,
87
+ "startPeriod": 180
88
+ },
89
+ "essential": true
90
+ }
91
+ ],
92
+ "placementConstraints": [],
93
+ "cpu": "1024",
94
+ "memory": "2048",
95
+ "requiresCompatibilities": [ "FARGATE" ],
96
+ "family": "wovnrb",
97
+ "networkMode": "awsvpc",
98
+ "volumes": []
99
+ }
@@ -111,6 +111,7 @@ module Wovnrb
111
111
  'lang_code' => lang_code,
112
112
  'url_pattern' => url_pattern,
113
113
  'lang_param_name' => lang_param_name,
114
+ 'translate_canonical_tag' => translate_canonical_tag,
114
115
  'product' => 'WOVN.rb',
115
116
  'version' => VERSION,
116
117
  'body' => body
@@ -130,7 +131,7 @@ module Wovnrb
130
131
  end
131
132
 
132
133
  def api_timeout
133
- @store.settings['api_timeout_seconds']
134
+ @headers.search_engine_bot? ? @store.settings['api_timeout_search_engine_bots'] : @store.settings['api_timeout_seconds']
134
135
  end
135
136
 
136
137
  def settings_hash
@@ -157,6 +158,10 @@ module Wovnrb
157
158
  @store.settings['custom_lang_aliases']
158
159
  end
159
160
 
161
+ def translate_canonical_tag
162
+ @store.settings['translate_canonical_tag']
163
+ end
164
+
160
165
  def page_url
161
166
  "#{@headers.protocol}://#{@headers.url}"
162
167
  end
@@ -56,6 +56,10 @@ module Wovnrb
56
56
  @pathname = @pathname.gsub(/\/$/, '')
57
57
  end
58
58
 
59
+ def url_with_scheme
60
+ "#{@protocol}://#{@url}"
61
+ end
62
+
59
63
  def unmasked_pathname_without_trailing_slash
60
64
  @unmasked_pathname.chomp('/')
61
65
  end
@@ -197,11 +201,24 @@ module Wovnrb
197
201
  end
198
202
 
199
203
  def dirname
200
- if pathname.include?('/')
201
- pathname.end_with?('/') ? pathname : pathname[0, pathname.rindex('/') + 1]
204
+ if pathname_with_trailing_slash_if_present.include?('/')
205
+ pathname_with_trailing_slash_if_present.end_with?('/') ? pathname_with_trailing_slash_if_present : pathname_with_trailing_slash_if_present[0, pathname_with_trailing_slash_if_present.rindex('/') + 1]
202
206
  else
203
207
  '/'
204
208
  end
205
209
  end
210
+
211
+ def search_engine_bot?
212
+ return false unless @env.key?('HTTP_USER_AGENT')
213
+
214
+ bots = %w[Googlebot/ bingbot/ YandexBot/ YandexWebmaster/ DuckDuckBot-Https/ Baiduspider/ Slurp Yahoo]
215
+ bots.any? { |bot| @env['HTTP_USER_AGENT'].include?(bot) }
216
+ end
217
+
218
+ def to_absolute_path(path)
219
+ absolute_path = path.blank? ? '/' : path
220
+ absolute_path = absolute_path.starts_with?('/') ? absolute_path : URL.join_paths(dirname, absolute_path)
221
+ URL.normalize_path_slash(path, absolute_path)
222
+ end
206
223
  end
207
224
  end