From cb133c65268615685523319cf0158c0b31f4be14 Mon Sep 17 00:00:00 2001 From: Ilgar Mashayev Date: Sun, 27 Apr 2025 22:12:43 +0200 Subject: [PATCH] Add docker compose file with postgres db Fix ruby code Fix bosh code --- .gitignore | 1 + bosh/.gitignore | 1 + bosh/.ruby-version | 1 + .../.dev_builds/jobs/rubyweb/index.yml | 5 +++ .../.dev_builds/packages/rubyweb/index.yml | 5 +++ .../.final_builds/packages/ruby-2.7/index.yml | 4 +++ bosh/ruby-app-release/config/final.yml | 1 + .../anynines/anynines-0+dev.1.yml | 23 ++++++++++++ .../dev_releases/anynines/index.yml | 4 +++ bosh/ruby-app-release/jobs/rubyweb/spec | 6 ++-- .../jobs/rubyweb/templates/config.erb | 10 +++--- .../jobs/rubyweb/templates/ctl.erb | 27 ++++++++++---- .../packages/ruby-2.7/spec.lock | 2 +- bosh/ruby-app-release/packages/rubyweb/spec | 2 +- bosh/ruby-app-release/src/ruby-web-app/app.rb | 2 +- .../unit-tests/.bundle/config | 2 ++ docker-compose.yaml | 17 +++++++++ ruby/Gemfile | 2 ++ ruby/app/controllers/articles.rb | 36 ++++++++++--------- ruby/app/routes/articles.rb | 23 +++++++----- ruby/app/routes/health.rb | 3 +- 21 files changed, 134 insertions(+), 43 deletions(-) create mode 100644 .gitignore create mode 100644 bosh/.gitignore create mode 100644 bosh/.ruby-version create mode 100644 bosh/ruby-app-release/.dev_builds/jobs/rubyweb/index.yml create mode 100644 bosh/ruby-app-release/.dev_builds/packages/rubyweb/index.yml create mode 100644 bosh/ruby-app-release/dev_releases/anynines/anynines-0+dev.1.yml create mode 100644 bosh/ruby-app-release/dev_releases/anynines/index.yml create mode 100644 bosh/ruby-app-release/unit-tests/.bundle/config create mode 100644 docker-compose.yaml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..723ef36 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea \ No newline at end of file diff --git a/bosh/.gitignore b/bosh/.gitignore new file mode 100644 index 0000000..4fc6e8a --- /dev/null +++ b/bosh/.gitignore @@ -0,0 +1 @@ +bosh-package-ruby-release/ \ No newline at end of file diff --git a/bosh/.ruby-version b/bosh/.ruby-version new file mode 100644 index 0000000..e2bdf6e --- /dev/null +++ b/bosh/.ruby-version @@ -0,0 +1 @@ +2.7.3 \ No newline at end of file diff --git a/bosh/ruby-app-release/.dev_builds/jobs/rubyweb/index.yml b/bosh/ruby-app-release/.dev_builds/jobs/rubyweb/index.yml new file mode 100644 index 0000000..8f37b9f --- /dev/null +++ b/bosh/ruby-app-release/.dev_builds/jobs/rubyweb/index.yml @@ -0,0 +1,5 @@ +builds: + 31885bc078fcd490dceb62b32b600b46c5214bdec9bcf01d3189d8320ee96f37: + version: 31885bc078fcd490dceb62b32b600b46c5214bdec9bcf01d3189d8320ee96f37 + sha1: sha256:7576432bf066a1ea45a10a53946c88c59e185d7c87744aa6f2178b15e475ee73 +format-version: "2" diff --git a/bosh/ruby-app-release/.dev_builds/packages/rubyweb/index.yml b/bosh/ruby-app-release/.dev_builds/packages/rubyweb/index.yml new file mode 100644 index 0000000..68d0bcb --- /dev/null +++ b/bosh/ruby-app-release/.dev_builds/packages/rubyweb/index.yml @@ -0,0 +1,5 @@ +builds: + c83678f978ddcb920e2c265d4c9f4f9044c79e75331b059074dda75d0a82c9a6: + version: c83678f978ddcb920e2c265d4c9f4f9044c79e75331b059074dda75d0a82c9a6 + sha1: sha256:fa9f72f6b61e9e1bba2ba8cd65fff924403a5a3427a82075c842d0ebcdb4e571 +format-version: "2" diff --git a/bosh/ruby-app-release/.final_builds/packages/ruby-2.7/index.yml b/bosh/ruby-app-release/.final_builds/packages/ruby-2.7/index.yml index e81b916..76e2989 100644 --- a/bosh/ruby-app-release/.final_builds/packages/ruby-2.7/index.yml +++ b/bosh/ruby-app-release/.final_builds/packages/ruby-2.7/index.yml @@ -1,4 +1,8 @@ builds: + 53dc8fec45e346855f164fe15d17f17cf2af29fb6ec3a435b2fc23f103bfb0aa: + version: 53dc8fec45e346855f164fe15d17f17cf2af29fb6ec3a435b2fc23f103bfb0aa + blobstore_id: c7522d70-a759-477a-5651-de65bc9e0f00 + sha1: sha256:96b39f7e8a27bfdfd5668d0b9340894f69ef223f3f7d4631179e81042f62b589 65be1e4d2f3bf2f828a861cd17b220492ad5c6680e1a3a320cf1179ed20b8609: version: 65be1e4d2f3bf2f828a861cd17b220492ad5c6680e1a3a320cf1179ed20b8609 blobstore_id: 01018e54-715b-44f2-4173-be949907b2b9 diff --git a/bosh/ruby-app-release/config/final.yml b/bosh/ruby-app-release/config/final.yml index db0cd24..3d5da27 100644 --- a/bosh/ruby-app-release/config/final.yml +++ b/bosh/ruby-app-release/config/final.yml @@ -2,3 +2,4 @@ blobstore: provider: local options: blobstore_path: /tmp/ruby-app-release-blobs +name: anynines \ No newline at end of file diff --git a/bosh/ruby-app-release/dev_releases/anynines/anynines-0+dev.1.yml b/bosh/ruby-app-release/dev_releases/anynines/anynines-0+dev.1.yml new file mode 100644 index 0000000..54de628 --- /dev/null +++ b/bosh/ruby-app-release/dev_releases/anynines/anynines-0+dev.1.yml @@ -0,0 +1,23 @@ +name: anynines +version: 0+dev.1 +commit_hash: 4cd8397 +uncommitted_changes: true +jobs: +- name: rubyweb + version: 31885bc078fcd490dceb62b32b600b46c5214bdec9bcf01d3189d8320ee96f37 + fingerprint: 31885bc078fcd490dceb62b32b600b46c5214bdec9bcf01d3189d8320ee96f37 + sha1: sha256:7576432bf066a1ea45a10a53946c88c59e185d7c87744aa6f2178b15e475ee73 + packages: + - ruby-2.7 +packages: +- name: ruby-2.7 + version: 53dc8fec45e346855f164fe15d17f17cf2af29fb6ec3a435b2fc23f103bfb0aa + fingerprint: 53dc8fec45e346855f164fe15d17f17cf2af29fb6ec3a435b2fc23f103bfb0aa + sha1: sha256:96b39f7e8a27bfdfd5668d0b9340894f69ef223f3f7d4631179e81042f62b589 + dependencies: [] +- name: rubyweb + version: c83678f978ddcb920e2c265d4c9f4f9044c79e75331b059074dda75d0a82c9a6 + fingerprint: c83678f978ddcb920e2c265d4c9f4f9044c79e75331b059074dda75d0a82c9a6 + sha1: sha256:fa9f72f6b61e9e1bba2ba8cd65fff924403a5a3427a82075c842d0ebcdb4e571 + dependencies: + - ruby-2.7 diff --git a/bosh/ruby-app-release/dev_releases/anynines/index.yml b/bosh/ruby-app-release/dev_releases/anynines/index.yml new file mode 100644 index 0000000..df0603e --- /dev/null +++ b/bosh/ruby-app-release/dev_releases/anynines/index.yml @@ -0,0 +1,4 @@ +builds: + 9b821ef4-2111-4514-6622-441262e331f4: + version: 0+dev.1 +format-version: "2" diff --git a/bosh/ruby-app-release/jobs/rubyweb/spec b/bosh/ruby-app-release/jobs/rubyweb/spec index 30092db..f22c961 100644 --- a/bosh/ruby-app-release/jobs/rubyweb/spec +++ b/bosh/ruby-app-release/jobs/rubyweb/spec @@ -2,11 +2,11 @@ name: rubyweb templates: - ctl.ebr: tmp/ctl - config.ebr: tmp/config.yml + ctl.erb: bin/ctl + config.erb: cfg/config.yml packages: -- ruby +- ruby-2.7 properties: port: diff --git a/bosh/ruby-app-release/jobs/rubyweb/templates/config.erb b/bosh/ruby-app-release/jobs/rubyweb/templates/config.erb index f8ee663..da4bee1 100644 --- a/bosh/ruby-app-release/jobs/rubyweb/templates/config.erb +++ b/bosh/ruby-app-release/jobs/rubyweb/templates/config.erb @@ -1,16 +1,16 @@ -- +--- -port = <%= +port: <%= port = p("port") -if port < 1024 or port > 4000 +if port < 8000 raise "Invalid port number" end -if (port.eql? 8080) || (port.eql? 8081) +if ! (port.eql? 8080) || (port.eql? 8081) raise "Wrong port number" end port -%> +%> \ No newline at end of file diff --git a/bosh/ruby-app-release/jobs/rubyweb/templates/ctl.erb b/bosh/ruby-app-release/jobs/rubyweb/templates/ctl.erb index 18e151a..534c712 100644 --- a/bosh/ruby-app-release/jobs/rubyweb/templates/ctl.erb +++ b/bosh/ruby-app-release/jobs/rubyweb/templates/ctl.erb @@ -1,3 +1,5 @@ +#!/bin/bash + set -e -x RUN_DIR=/var/vcap/sys/run/rubyweb @@ -16,21 +18,32 @@ case $1 in source /var/vcap/packages/ruby-2.7/bosh/runtime.env - <%= - + <%= start_file = p('bootstrap') - if not start_file.empty? + if start_file.empty? raise 'No bootstrap file provided' end - + if ! start_file.eql? "app.rb" + raise 'Wrong bootstrap file provided' + end %> - bundle exec ruby <%= start_file unless start_file.eql? "app.rb" %> \ + bundle exec ruby <%= start_file %> \ >> $LOG_DIR/rubyweb.stdout.log \ 2>> $LOG_DIR/rubyweb.stderr.log ;; + stop) + if [ ! -f "$PIDFILE" ] || ! kill -0 `cat "$PIDFILE"`; then + echo 'Service not running' >&2 + return 1 + fi + echo "Stopping service..." >&2 + kill -9 `cat $PIDFILE` + echo "Service stopped" >&2 + ;; + *) echo "Usage: ctl {start|stop}" + ;; -esac - +esac \ No newline at end of file diff --git a/bosh/ruby-app-release/packages/ruby-2.7/spec.lock b/bosh/ruby-app-release/packages/ruby-2.7/spec.lock index 6f775da..b7feb66 100644 --- a/bosh/ruby-app-release/packages/ruby-2.7/spec.lock +++ b/bosh/ruby-app-release/packages/ruby-2.7/spec.lock @@ -1,2 +1,2 @@ name: ruby-2.7 -fingerprint: 65be1e4d2f3bf2f828a861cd17b220492ad5c6680e1a3a320cf1179ed20b8609 +fingerprint: 53dc8fec45e346855f164fe15d17f17cf2af29fb6ec3a435b2fc23f103bfb0aa diff --git a/bosh/ruby-app-release/packages/rubyweb/spec b/bosh/ruby-app-release/packages/rubyweb/spec index baf84eb..2810287 100644 --- a/bosh/ruby-app-release/packages/rubyweb/spec +++ b/bosh/ruby-app-release/packages/rubyweb/spec @@ -5,4 +5,4 @@ files: - ruby-web-app/**/* dependencies: -- ruby-2.3.2 +- ruby-2.7 diff --git a/bosh/ruby-app-release/src/ruby-web-app/app.rb b/bosh/ruby-app-release/src/ruby-web-app/app.rb index 2246b84..9197b46 100644 --- a/bosh/ruby-app-release/src/ruby-web-app/app.rb +++ b/bosh/ruby-app-release/src/ruby-web-app/app.rb @@ -6,7 +6,7 @@ # config = YAML.load_file('/var/vcap/jobs/rubyweb/cfg/config.yml') set :bind, '0.0.0.0' - set :port, 8181 + set :port, 8080 class Item attr_reader :name, :type diff --git a/bosh/ruby-app-release/unit-tests/.bundle/config b/bosh/ruby-app-release/unit-tests/.bundle/config new file mode 100644 index 0000000..be1df23 --- /dev/null +++ b/bosh/ruby-app-release/unit-tests/.bundle/config @@ -0,0 +1,2 @@ +--- +BUNDLE_WITH: "development" diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..2107062 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,17 @@ +version: '3.1' +services : + db: + image: postgres:10-alpine + ports: + - "5432:5432" + environment: + POSTGRES_USER: applicant + POSTGRES_PASSWORD: temp123 + POSTGRES_DB: blog_db + admin: + image: adminer + restart: always + depends_on: + - db + ports: + - 8080:8080 \ No newline at end of file diff --git a/ruby/Gemfile b/ruby/Gemfile index 0ca7b38..e3ff3a7 100644 --- a/ruby/Gemfile +++ b/ruby/Gemfile @@ -8,3 +8,5 @@ gem 'dotenv', '~> 2.8' gem 'pg', '~> 1.4' gem 'webrick', '~> 1.7' gem "activerecord", "~> 7.0" +gem "minitest", "~> 5.0" +gem "minitest-reporters" \ No newline at end of file diff --git a/ruby/app/controllers/articles.rb b/ruby/app/controllers/articles.rb index 7a74b26..2068f7b 100644 --- a/ruby/app/controllers/articles.rb +++ b/ruby/app/controllers/articles.rb @@ -1,55 +1,59 @@ class ArticleController def create_article(article) - article_not_exists = ! (Article.where(:title => article['title']).empty?) + article_not_exists = Article.where(:title => article['title']).empty? return { ok: false, msg: 'Article with given title already exists' } unless article_not_exists new_article = Article.new(:title => article['title'], :content => article['content'], :created_at => Time.now) new_article.save - { ok: false, obj: article } + { ok: true, obj: article } rescue StandardError { ok: false } end def update_article(id, new_data) - article = Article.where(id: id).first - return { ok: false, msg: 'Article could not be found' } unless article.nil? + return { ok: false, msg: 'Article could not be found' } if article.nil? article.title = new_data['title'] article.content = new_data['content'] - article.save_changes + article.save - { ok: true } + { ok: true, obj: article } rescue StandardError { ok: false } end def get_article(id) - res = Article.where(:id => id) + res = Article.where(id: id).first - if res.empty? - { ok: true, data: res } - else - { ok: false, msg: 'Article not found' } - end + return { ok: false, msg: 'Article not found' } if res.nil? + { ok: true, data: res } rescue StandardError { ok: false } end - def delete_article(_id) - delete_count = Article.delete(:id => id) + def delete_article(id) + delete_count = Article.delete(id) if delete_count == 0 - { ok: true } + { ok: false } else { ok: true, delete_count: delete_count } end end def get_batch - + res = Article.all + + if res.empty? + { ok: false, msg: 'No articles found' } + else + { ok: true, data: res } + end + rescue StandardError + { ok: false } end end diff --git a/ruby/app/routes/articles.rb b/ruby/app/routes/articles.rb index 390b27c..6d52f69 100644 --- a/ruby/app/routes/articles.rb +++ b/ruby/app/routes/articles.rb @@ -13,9 +13,9 @@ def initialize end get('/') do - summmary = @articleCtrl.get_batch + summary = @articleCtrl.get_batch - if !(summary[:ok]) + if summary[:ok] { articles: summary[:data] }.to_json else { msg: 'Could not get articles.' }.to_json @@ -23,15 +23,21 @@ def initialize end get('/:id') do - + article = @articleCtrl.get_article(params['id']) + + if article[:ok] + { article: article[:data] }.to_json + else + { msg: 'Could not get articles.' }.to_json + end end post('/') do payload = JSON.parse(request.body.read) - summary = @articleCtrl.update_article(payload) + summary = @articleCtrl.create_article(payload) if summary[:ok] - { msg: 'Article updated' }.to_json + { msg: 'Article created' }.to_json else { msg: summary[:msg] }.to_json end @@ -39,21 +45,22 @@ def initialize put('/:id') do payload = JSON.parse(request.body.read) - summary = @articleCtrl.uptade_article params['ids'], payload + summary = @articleCtrl.update_article params['id'], payload if summary[:ok] + { msg: 'Article updated' }.to_json else { msg: summary[:msg] }.to_json end end delete('/:id') do - summary = self.delete_article params['id'] + summary = @articleCtrl.delete_article params['id'] if summary[:ok] { msg: 'Article deleted' }.to_json else - { mgs: 'Article does not exist' }.to_bson + { msg: 'Article does not exist' }.to_json end end end diff --git a/ruby/app/routes/health.rb b/ruby/app/routes/health.rb index 996583e..93e4628 100644 --- a/ruby/app/routes/health.rb +++ b/ruby/app/routes/health.rb @@ -1,5 +1,6 @@ class HealthRoutes < Sinatra::Base - + use AuthMiddleware + get('/') do if request.env['AUTHED'] == true 'App working OK'