From 466ca6cc12bb0a3444e4e99d556ef3b0ac0051c6 Mon Sep 17 00:00:00 2001 From: "Juan A. Fernandez" Date: Sat, 16 Dec 2017 23:49:45 +0000 Subject: [PATCH 1/5] Added support for Ruby apps based on Rack. --- app-backend/src/dockerfiles/ruby | 12 ++++++++++++ app-backend/src/user/TemplateHelper.js | 9 ++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 app-backend/src/dockerfiles/ruby diff --git a/app-backend/src/dockerfiles/ruby b/app-backend/src/dockerfiles/ruby new file mode 100644 index 0000000..18b79f9 --- /dev/null +++ b/app-backend/src/dockerfiles/ruby @@ -0,0 +1,12 @@ +RUN apk --update add make g++ + +RUN mkdir -p /usr/src/app +WORKDIR /usr/src/app + +COPY ./src/Gemfile /usr/src/app/ +RUN bundle install +COPY ./src /usr/src/app + +EXPOSE 80 + +CMD ["rackup", "config.ru", "--host", "0.0.0.0", "--port", "80"] diff --git a/app-backend/src/user/TemplateHelper.js b/app-backend/src/user/TemplateHelper.js index 3178214..98baae3 100644 --- a/app-backend/src/user/TemplateHelper.js +++ b/app-backend/src/user/TemplateHelper.js @@ -93,6 +93,13 @@ class TemplateHelper { dockerFileFromName: 'python', displayName: 'Python', tagSuffix: '-alpine3.6' + }, + { + templateName: 'ruby', + dockerHubImageName: 'library/ruby', + dockerFileFromName: 'ruby', + displayName: 'Ruby', + tagSuffix: '-alpine3.7' } ]; @@ -251,4 +258,4 @@ module.exports = { get: function () { return templateHelperInstance; } -}; \ No newline at end of file +}; From b371385baab6b8a8fe990dd1a9e9c3c1617629a0 Mon Sep 17 00:00:00 2001 From: "Juan A. Fernandez" Date: Sun, 17 Dec 2017 00:59:40 +0100 Subject: [PATCH 2/5] Added Ruby sample. --- captain-sample-apps/ruby.tar | Bin 0 -> 52224 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 captain-sample-apps/ruby.tar diff --git a/captain-sample-apps/ruby.tar b/captain-sample-apps/ruby.tar new file mode 100644 index 0000000000000000000000000000000000000000..753452bdf8efc8556e7c51780585a512c00a4e9b GIT binary patch literal 52224 zcmeHwdz2hkdFRL>ak>fQNr;nh_PS?q&y1$uubB}eM;^)c*m`Tma?oQ`T~$5PR(Dma zs$0@nlFyQaWPy-}33ePD!XFMX$uT$_b3#J0XR~L4*dQL84IC13g0mY!*d>o+%(A;I z?C<;Tt?KHYXHUAvf~`K5r@QJtzI*TY{=R$fU1q&ft(ilE{G`+AVm>d1@V8Vf@ZWS+ z{>CGGa(R)-Wiy3rDU(lUMLLts=W|0MJxHLuwp(sfa{$@{EzR{}XXX)6d7FHx!^DFawzZU28P8s+BOzO4X`1 ztM-OOussk!8XMDpu_Wm~m&q5wAkz3#D24RDz1i-q)|IG;x%#qM*X}bN7t0?L(-|>= zr%kiosA)}e&cLG>@rP74nNQ|o(QDC=HS{*iH*RU&wkp-7q|+K8h?~(r#J!^bTqak_ zko+$dL;4@!inN<{T9!EK*m}}3FNrJSs%c%kDo(|->2!QTT#3)xR@1baiTRa=85c8q zMZ9TVZl;!-^;-Pe1PU&jwVEw1*-p(k9XH}<&WLLvb7)WR4gW2B+}{WLUB5i5!p0;?S`aCbLk_NkbF$kH5Z`s!#T2PwVE0NKbn
  • 6J0 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 literal 0 HcmV?d00001 From 4230ca2f486bfad4a5f4f06f8f18ba272ee4c681 Mon Sep 17 00:00:00 2001 From: "Juan A. Fernandez" Date: Sun, 17 Dec 2017 11:02:25 +0100 Subject: [PATCH 3/5] RACK_ENV variable added to the ruby dockerfile. --- app-backend/src/dockerfiles/ruby | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app-backend/src/dockerfiles/ruby b/app-backend/src/dockerfiles/ruby index 18b79f9..dd560ac 100644 --- a/app-backend/src/dockerfiles/ruby +++ b/app-backend/src/dockerfiles/ruby @@ -6,7 +6,7 @@ WORKDIR /usr/src/app COPY ./src/Gemfile /usr/src/app/ RUN bundle install COPY ./src /usr/src/app - +ENV RACK_ENV production EXPOSE 80 CMD ["rackup", "config.ru", "--host", "0.0.0.0", "--port", "80"] From b6a6760e0f242ea1850e2e5e4e17a78d368158b1 Mon Sep 17 00:00:00 2001 From: "Juan A. Fernandez" Date: Sun, 7 Jan 2018 03:33:23 +0100 Subject: [PATCH 4/5] ruby template renamed to ruby-rack --- app-backend/src/dockerfiles/{ruby => ruby-rack} | 0 app-backend/src/user/TemplateHelper.js | 6 +++--- captain-sample-apps/{ruby.tar => ruby-rack.tar} | Bin 3 files changed, 3 insertions(+), 3 deletions(-) rename app-backend/src/dockerfiles/{ruby => ruby-rack} (100%) rename captain-sample-apps/{ruby.tar => ruby-rack.tar} (100%) diff --git a/app-backend/src/dockerfiles/ruby b/app-backend/src/dockerfiles/ruby-rack similarity index 100% rename from app-backend/src/dockerfiles/ruby rename to app-backend/src/dockerfiles/ruby-rack diff --git a/app-backend/src/user/TemplateHelper.js b/app-backend/src/user/TemplateHelper.js index 98baae3..add8cfb 100644 --- a/app-backend/src/user/TemplateHelper.js +++ b/app-backend/src/user/TemplateHelper.js @@ -95,10 +95,10 @@ class TemplateHelper { tagSuffix: '-alpine3.6' }, { - templateName: 'ruby', + templateName: 'ruby-rack', dockerHubImageName: 'library/ruby', - dockerFileFromName: 'ruby', - displayName: 'Ruby', + dockerFileFromName: 'ruby-rack', + displayName: 'Ruby Rack', tagSuffix: '-alpine3.7' } ]; diff --git a/captain-sample-apps/ruby.tar b/captain-sample-apps/ruby-rack.tar similarity index 100% rename from captain-sample-apps/ruby.tar rename to captain-sample-apps/ruby-rack.tar From 77fd0ec36c070d335b68f47d0ab1abfb6286f84a Mon Sep 17 00:00:00 2001 From: "Juan A. Fernandez" Date: Sun, 7 Jan 2018 03:34:40 +0100 Subject: [PATCH 5/5] ruby-rack sample updated. --- captain-sample-apps/ruby-rack | 1 + captain-sample-apps/ruby-rack.tar | Bin 52224 -> 8267 bytes 2 files changed, 1 insertion(+) create mode 160000 captain-sample-apps/ruby-rack diff --git a/captain-sample-apps/ruby-rack b/captain-sample-apps/ruby-rack new file mode 160000 index 0000000..b4539f6 --- /dev/null +++ b/captain-sample-apps/ruby-rack @@ -0,0 +1 @@ +Subproject commit b4539f614742c562db18da1706a8070e5fbcfc84 diff --git a/captain-sample-apps/ruby-rack.tar b/captain-sample-apps/ruby-rack.tar index 753452bdf8efc8556e7c51780585a512c00a4e9b..8c0cd8c2b667d52cba7f086d4164b49b595d2cee 100644 GIT binary patch literal 8267 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

  • 6J0 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