From 6d370e90f75b322d60a2a093afc0fb30784b5db1 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Thu, 2 Aug 2018 22:07:09 +0800 Subject: [PATCH] add dockerfile for ror, fix template issue (#718) --- .../languages/RubyOnRailsServerCodegen.java | 6 +- .../resources/ruby-on-rails-server/Dockerfile | 29 +++++++++ .../{Gemfile => Gemfile.mustache} | 0 .../{database.yml => database.mustache} | 0 .../ruby-on-rails-server/docker-entrypoint.sh | 9 +++ .../server/petstore/ruby-on-rails/Dockerfile | 29 +++++++++ samples/server/petstore/ruby-on-rails/Gemfile | 6 -- .../ruby-on-rails/config/database.yml | 58 ----------------- .../ruby-on-rails/docker-entrypoint.sh | 9 +++ samples/server/petstore/ruby-on-rails/pom.xml | 62 +++++++++++++++++++ 10 files changed, 142 insertions(+), 66 deletions(-) create mode 100644 modules/openapi-generator/src/main/resources/ruby-on-rails-server/Dockerfile rename modules/openapi-generator/src/main/resources/ruby-on-rails-server/{Gemfile => Gemfile.mustache} (100%) rename modules/openapi-generator/src/main/resources/ruby-on-rails-server/{database.yml => database.mustache} (100%) create mode 100644 modules/openapi-generator/src/main/resources/ruby-on-rails-server/docker-entrypoint.sh create mode 100644 samples/server/petstore/ruby-on-rails/Dockerfile create mode 100644 samples/server/petstore/ruby-on-rails/docker-entrypoint.sh create mode 100644 samples/server/petstore/ruby-on-rails/pom.xml diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubyOnRailsServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubyOnRailsServerCodegen.java index 14309641f45f..1c58af9123ed 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubyOnRailsServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubyOnRailsServerCodegen.java @@ -122,7 +122,7 @@ public void processOpts() { additionalProperties.put("isDBSQLite", Boolean.TRUE); } - supportingFiles.add(new SupportingFile("Gemfile", "", "Gemfile")); + supportingFiles.add(new SupportingFile("Gemfile.mustache", "", "Gemfile")); supportingFiles.add(new SupportingFile("README.md", "", "README.md")); supportingFiles.add(new SupportingFile("Rakefile", "", "Rakefile")); supportingFiles.add(new SupportingFile("config.ru", "", "config.ru")); @@ -155,7 +155,7 @@ public void processOpts() { supportingFiles.add(new SupportingFile("application.rb", configFolder, "application.rb")); supportingFiles.add(new SupportingFile("boot.rb", configFolder, "boot.rb")); supportingFiles.add(new SupportingFile("cable.yml", configFolder, "cable.yml")); - supportingFiles.add(new SupportingFile("database.yml", configFolder, "database.yml")); + supportingFiles.add(new SupportingFile("database.mustache", configFolder, "database.yml")); supportingFiles.add(new SupportingFile("environment.rb", configFolder, "environment.rb")); supportingFiles.add(new SupportingFile("puma.rb", configFolder, "puma.rb")); supportingFiles.add(new SupportingFile("routes.mustache", configFolder, "routes.rb")); @@ -181,6 +181,8 @@ public void processOpts() { supportingFiles.add(new SupportingFile(".keep", socketsFolder, ".keep")); supportingFiles.add(new SupportingFile("restart.txt", tmpFolder, "restart.txt")); supportingFiles.add(new SupportingFile(".keep", vendorFolder, ".keep")); + supportingFiles.add(new SupportingFile("Dockerfile", "", "Dockerfile")); + supportingFiles.add(new SupportingFile("docker-entrypoint.sh", "", "docker-entrypoint.sh")); } @Override diff --git a/modules/openapi-generator/src/main/resources/ruby-on-rails-server/Dockerfile b/modules/openapi-generator/src/main/resources/ruby-on-rails-server/Dockerfile new file mode 100644 index 000000000000..d53cf3aacd07 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/ruby-on-rails-server/Dockerfile @@ -0,0 +1,29 @@ +FROM ruby:2.5-alpine + +ENV BUILD_PACKAGES="curl-dev ruby-dev build-base" \ + DEV_PACKAGES="zlib-dev libxml2-dev libxslt-dev tzdata yaml-dev sqlite-dev" \ + RUBY_PACKAGES="ruby-json yaml nodejs" + +RUN apk update && \ + apk upgrade && \ + apk add --no-cache --update\ + $BUILD_PACKAGES \ + $DEV_PACKAGES \ + $RUBY_PACKAGES && \ + mkdir -p /usr/src/myapp + +WORKDIR /usr/src/myapp + +COPY Gemfile ./ +RUN gem install bundler +RUN bundle config build.nokogiri --use-system-libraries && \ + bundle install --jobs=4 --retry=10 --clean + +COPY . ./ +RUN chmod +x bin/rails + +COPY docker-entrypoint.sh /usr/local/bin/ +RUN chmod +x /usr/local/bin/docker-entrypoint.sh +ENTRYPOINT ["docker-entrypoint.sh"] + +CMD ["bin/rails", "s", "-b", "0.0.0.0"] diff --git a/modules/openapi-generator/src/main/resources/ruby-on-rails-server/Gemfile b/modules/openapi-generator/src/main/resources/ruby-on-rails-server/Gemfile.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/ruby-on-rails-server/Gemfile rename to modules/openapi-generator/src/main/resources/ruby-on-rails-server/Gemfile.mustache diff --git a/modules/openapi-generator/src/main/resources/ruby-on-rails-server/database.yml b/modules/openapi-generator/src/main/resources/ruby-on-rails-server/database.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/ruby-on-rails-server/database.yml rename to modules/openapi-generator/src/main/resources/ruby-on-rails-server/database.mustache diff --git a/modules/openapi-generator/src/main/resources/ruby-on-rails-server/docker-entrypoint.sh b/modules/openapi-generator/src/main/resources/ruby-on-rails-server/docker-entrypoint.sh new file mode 100644 index 000000000000..93372e839359 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/ruby-on-rails-server/docker-entrypoint.sh @@ -0,0 +1,9 @@ +#!/bin/sh +set -e + +if [ "$1" = 'bin/rails' ] && [ "$2" = 's' ]; then + rm -f /myapp/tmp/pids/server.pid + bin/rails db:migrate +fi + +exec "$@" diff --git a/samples/server/petstore/ruby-on-rails/Dockerfile b/samples/server/petstore/ruby-on-rails/Dockerfile new file mode 100644 index 000000000000..d53cf3aacd07 --- /dev/null +++ b/samples/server/petstore/ruby-on-rails/Dockerfile @@ -0,0 +1,29 @@ +FROM ruby:2.5-alpine + +ENV BUILD_PACKAGES="curl-dev ruby-dev build-base" \ + DEV_PACKAGES="zlib-dev libxml2-dev libxslt-dev tzdata yaml-dev sqlite-dev" \ + RUBY_PACKAGES="ruby-json yaml nodejs" + +RUN apk update && \ + apk upgrade && \ + apk add --no-cache --update\ + $BUILD_PACKAGES \ + $DEV_PACKAGES \ + $RUBY_PACKAGES && \ + mkdir -p /usr/src/myapp + +WORKDIR /usr/src/myapp + +COPY Gemfile ./ +RUN gem install bundler +RUN bundle config build.nokogiri --use-system-libraries && \ + bundle install --jobs=4 --retry=10 --clean + +COPY . ./ +RUN chmod +x bin/rails + +COPY docker-entrypoint.sh /usr/local/bin/ +RUN chmod +x /usr/local/bin/docker-entrypoint.sh +ENTRYPOINT ["docker-entrypoint.sh"] + +CMD ["bin/rails", "s", "-b", "0.0.0.0"] diff --git a/samples/server/petstore/ruby-on-rails/Gemfile b/samples/server/petstore/ruby-on-rails/Gemfile index ea808507a709..3471246b1b02 100644 --- a/samples/server/petstore/ruby-on-rails/Gemfile +++ b/samples/server/petstore/ruby-on-rails/Gemfile @@ -3,14 +3,8 @@ source 'https://rubygems.org' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 5.0.0' -{{#isDBSQLite}} # Use sqlite as the database for Active Record gem 'sqlite3', '~> 1.3' -{{/isDBSQLite}} -{{#isDBMySQL}} -# Use mysql as the database for Active Record -gem 'mysql2', '>= 0.3.18', '< 0.5' -{{/isDBMySQL}} # Use Puma as the app server gem 'puma', '~> 3.0' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder diff --git a/samples/server/petstore/ruby-on-rails/config/database.yml b/samples/server/petstore/ruby-on-rails/config/database.yml index 170b64b24fb8..025d62a8d810 100644 --- a/samples/server/petstore/ruby-on-rails/config/database.yml +++ b/samples/server/petstore/ruby-on-rails/config/database.yml @@ -1,60 +1,3 @@ -{{#isDBMySQL}} -# MySQL. Versions 5.0 and up are supported. -# -# Install the MySQL driver -# gem install mysql2 -# -# Ensure the MySQL gem is defined in your Gemfile -# gem 'mysql2' -# -# And be sure to use new-style password hashing: -# http://dev.mysql.com/doc/refman/5.7/en/old-client.html -# -default: &default - adapter: mysql2 - encoding: utf8 - pool: 5 - username: root - password: - socket: /tmp/mysql.sock - -development: - <<: *default - database: api_demo_development - -# Warning: The database defined as "test" will be erased and -# re-generated from your development database when you run "rake". -# Do not set this db to the same as development or production. -test: - <<: *default - database: api_demo_test - -# As with config/secrets.yml, you never want to store sensitive information, -# like your database password, in your source code. If your source code is -# ever seen by anyone, they now have access to your database. -# -# Instead, provide the password as a unix environment variable when you boot -# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database -# for a full rundown on how to provide these environment variables in a -# production deployment. -# -# On Heroku and other platform providers, you may have a full connection URL -# available as an environment variable. For example: -# -# DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase" -# -# You can use this database configuration with: -# -# production: -# url: <%= ENV['DATABASE_URL'] %> -# -production: - <<: *default - database: api_demo_production - username: api_demo - password: <%= ENV['API_DEMO_DATABASE_PASSWORD'] %> -{{/isDBMySQL}} -{{#isDBSQLite}} # SQLite version 3.x # gem install sqlite3-ruby (not necessary on OS X Leopard) development: @@ -77,4 +20,3 @@ production: database: db/production.sqlite3 pool: 5 timeout: 5000 -{{/isDBSQLite}} \ No newline at end of file diff --git a/samples/server/petstore/ruby-on-rails/docker-entrypoint.sh b/samples/server/petstore/ruby-on-rails/docker-entrypoint.sh new file mode 100644 index 000000000000..93372e839359 --- /dev/null +++ b/samples/server/petstore/ruby-on-rails/docker-entrypoint.sh @@ -0,0 +1,9 @@ +#!/bin/sh +set -e + +if [ "$1" = 'bin/rails' ] && [ "$2" = 's' ]; then + rm -f /myapp/tmp/pids/server.pid + bin/rails db:migrate +fi + +exec "$@" diff --git a/samples/server/petstore/ruby-on-rails/pom.xml b/samples/server/petstore/ruby-on-rails/pom.xml new file mode 100644 index 000000000000..53cf1b97adc4 --- /dev/null +++ b/samples/server/petstore/ruby-on-rails/pom.xml @@ -0,0 +1,62 @@ + + 4.0.0 + org.opoenapitools + RORPetstoreServerTests + pom + 1.0-SNAPSHOT + ROR Petstore Server + + + + maven-dependency-plugin + + + package + + copy-dependencies + + + ${project.build.directory} + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.2.1 + + + bundle-install + pre-integration-test + + exec + + + bundle + + install + --path + vendor/bundle + + + + + + + + +