diff --git a/app/apps/ood_app.rb b/app/apps/ood_app.rb index 1a81b774..7f0b4c03 100644 --- a/app/apps/ood_app.rb +++ b/app/apps/ood_app.rb @@ -84,6 +84,39 @@ def run_setup_production end end + def passenger_rack_app? + path.join("config.ru").file? + end + + def passenger_nodejs_app? + path.join("app.js").file? + end + + def passenger_python_app? + path.join("passenger_wsgi.py").file? + end + + def passenger_meteor_app? + path.join(".meteor").exist? + end + + def passenger_app? + passenger_rack_app? || passenger_nodejs_app? || passenger_python_app? || passenger_meteor_app? + end + + def passenger_rails_app? + return @passenger_rails_app if defined? @passenger_rails_app + @passenger_rails_app = (passenger_rack_app? && bundler_helper.has_gem?("rails")) + end + + def passenger_railsdb_app? + # FIXME: assumes a rails db ood app will always use sqlite3 + return @passenger_railsdb_app if defined? @passenger_railsdb_app + @passenger_railsdb_app = (passenger_rails_app? && bundler_helper.has_gem?("sqlite3")) + end + + + private def load_manifest diff --git a/app/helpers/products_helper.rb b/app/helpers/products_helper.rb index 17f44517..99a894e4 100644 --- a/app/helpers/products_helper.rb +++ b/app/helpers/products_helper.rb @@ -33,4 +33,15 @@ def ssh_key target = Pathname.new("~/.ssh/id_rsa.pub").expand_path File.read(target) if target.file? end + + def command_btn(title:, key:, display:) + button_tag(title, + class: "btn btn-default btn-block", + data: { + toggle: "cli", + target: cli_product_path(key, name: @product.name, type: @type), + title: title, + cmd: display + }) + end end diff --git a/app/models/product.rb b/app/models/product.rb index d4b423d8..5646c75b 100644 --- a/app/models/product.rb +++ b/app/models/product.rb @@ -1,6 +1,8 @@ class Product include ActiveModel::Model + delegate :passenger_rack_app?, :passenger_rails_app?, :passenger_app?, to: :app + TEMPLATE = "https://raw.githubusercontent.com/AweSim-OSC/rails-application-template/remote_source/awesim.rb" attr_accessor :name @@ -16,8 +18,12 @@ class Product # lint a given app validate :manifest_is_valid, on: [:show_app, :list_apps] - validate :gemfile_is_valid, on: :show_app - validate :gems_installed, on: :show_app + + with_options if: :passenger_rails_app?, on: :show_app do |app| + app.validate :gemfile_is_valid + app.validate :gems_installed + end + validate :is_git_repo, on: :show_app def app_does_not_exist diff --git a/app/views/products/show.html.erb b/app/views/products/show.html.erb index 4226c354..6b3c7580 100644 --- a/app/views/products/show.html.erb +++ b/app/views/products/show.html.erb @@ -42,21 +42,13 @@

- <%= link_to 'Shell', OodAppkit.shell.url(host: ENV['OOD_DEV_SSH_HOST'], path: @product.router.path.realdirpath).to_s, target: '_blank', class: 'btn btn-default btn-block' %> - <%= link_to 'Files', OodAppkit.files.url(path: @product.router.path.realdirpath).to_s, target: '_blank', class: 'btn btn-default btn-block' %> + <%= command_btn(title: "Bundle Install", key: "bundle_install", display:"scl enable rh-ruby22 nodejs010 -- bin/bundle install --path=vendor/bundle") if @product.passenger_rails_app? %> + <%= command_btn(title: "Precompile Assets", key: "precompile_assets", display: "RAILS_ENV=production scl enable rh-ruby22 nodejs010 -- <<< 'bin/rake assets:clobber && bin/rake assets:precompile && bin/rake tmp:clear'") if @type == :usr && @product.passenger_rails_app? %> + <%= command_btn(title: "Restart App", key: "restart_app", display: "mkdir -p tmp && touch tmp/restart.txt") if @product.passenger_app? %>
- - <% if @type == :usr %> - - <% end %> - + <%= link_to 'Shell', OodAppkit.shell.url(host: ENV['OOD_DEV_SSH_HOST'], path: @product.router.path.realdirpath).to_s, target: '_blank', class: 'btn btn-default btn-block' %> + <%= link_to 'Files', OodAppkit.files.url(path: @product.router.path.realdirpath).to_s, target: '_blank', class: 'btn btn-default btn-block' %>