From ca28e0aa87bb799f8dfb9f31406c01d1aa0d0ee0 Mon Sep 17 00:00:00 2001 From: Tom Staubitz Date: Sat, 31 Dec 2016 00:05:23 +0100 Subject: [PATCH] updated rails from 4.1.13 to 4.2.5. This is required for rails to make use of new features in postgres 9.5 @Ralf TODO: migration /Users/groucho/Documents/HPI/workspace/Xikolo-CodeOcean/codeocean/db/migrate/20160204111716_add_user_to_code_harbor_link.rb is broken. A reference is made to table users which does not exist. Workaround: run rake db:schema:load before running db:migrate. Still this should be fixed. --- Gemfile | 2 +- Gemfile.lock | 135 +- app/controllers/concerns/lti.rb | 4 +- app/controllers/exercises_controller.rb | 4 +- bin/rails | 2 +- bin/setup | 29 + config/application.rb | 18 +- config/boot.rb | 3 +- config/environments/development.rb | 18 +- config/environments/production.rb | 30 +- config/environments/test.rb | 7 +- config/initializers/assets.rb | 12 + config/initializers/session_store.rb | 2 +- config/locales/en.yml | 22 + config/routes.rb | 14 +- .../20161214144837_create_lti_parameters.rb | 4 +- db/schema.rb | 143 +- db/structure.sql | 1227 +++++++++++++++++ debian_installer/setup_debian_vm.sh | 4 +- 19 files changed, 1503 insertions(+), 177 deletions(-) create mode 100755 bin/setup create mode 100644 config/initializers/assets.rb create mode 100644 db/structure.sql diff --git a/Gemfile b/Gemfile index 65cb5fe8..afd0aeff 100644 --- a/Gemfile +++ b/Gemfile @@ -21,7 +21,7 @@ gem 'pg', platform: :ruby gem 'pry-byebug' gem 'puma', '~> 2.15.3' gem 'pundit' -gem 'rails', '~> 4.1.13' +gem 'rails', '4.2.5' gem 'rails-i18n', '~> 4.0.0' gem 'ransack' gem 'rubytree' diff --git a/Gemfile.lock b/Gemfile.lock index 3493d81f..d00e819c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,40 +2,49 @@ GEM remote: https://rubygems.org/ specs: ZenTest (4.11.0) - actionmailer (4.1.14.1) - actionpack (= 4.1.14.1) - actionview (= 4.1.14.1) + actionmailer (4.2.5) + actionpack (= 4.2.5) + actionview (= 4.2.5) + activejob (= 4.2.5) mail (~> 2.5, >= 2.5.4) - actionpack (4.1.14.1) - actionview (= 4.1.14.1) - activesupport (= 4.1.14.1) - rack (~> 1.5.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.5) + actionview (= 4.2.5) + activesupport (= 4.2.5) + rack (~> 1.6) rack-test (~> 0.6.2) - actionview (4.1.14.1) - activesupport (= 4.1.14.1) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.5) + activesupport (= 4.2.5) builder (~> 3.1) erubis (~> 2.7.0) - activemodel (4.1.14.1) - activesupport (= 4.1.14.1) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.5) + activesupport (= 4.2.5) + globalid (>= 0.3.0) + activemodel (4.2.5) + activesupport (= 4.2.5) builder (~> 3.1) - activerecord (4.1.14.1) - activemodel (= 4.1.14.1) - activesupport (= 4.1.14.1) - arel (~> 5.0.0) + activerecord (4.2.5) + activemodel (= 4.2.5) + activesupport (= 4.2.5) + arel (~> 6.0) activerecord-jdbc-adapter (1.3.19) activerecord (>= 2.2) activerecord-jdbcpostgresql-adapter (1.3.19) activerecord-jdbc-adapter (~> 1.3.19) jdbc-postgres (>= 9.1) - activesupport (4.1.14.1) - i18n (~> 0.6, >= 0.6.9) + activesupport (4.2.5) + i18n (~> 0.7) json (~> 1.7, >= 1.7.7) minitest (~> 5.1) - thread_safe (~> 0.1) + thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) addressable (2.4.0) - arel (5.0.1.20140414130214) - ast (2.2.0) + arel (6.0.4) + ast (2.3.0) autotest-rails (4.2.1) ZenTest (~> 4.5) bcrypt (3.1.10) @@ -97,6 +106,7 @@ GEM execjs coffee-script-source (1.10.0) concurrent-ruby (1.0.2) + concurrent-ruby (1.0.2-java) concurrent-ruby-ext (1.0.2) concurrent-ruby (~> 1.0.2) d3-rails (3.5.11) @@ -128,6 +138,8 @@ GEM ffi (1.9.10) ffi (1.9.10-java) forgery (0.6.0) + globalid (0.3.7) + activesupport (>= 4.1.0) highline (1.7.8) hike (1.2.3) http-cookie (1.0.2) @@ -150,13 +162,15 @@ GEM json (1.8.3-java) jwt (1.5.1) kramdown (1.9.0) - mail (2.6.3) - mime-types (>= 1.16, < 3) + loofah (2.0.3) + nokogiri (>= 1.5.9) + mail (2.6.4) + mime-types (>= 1.16, < 4) method_source (0.8.2) - mime-types (2.99) - mini_portile2 (2.0.0) - minitest (5.9.0) - multi_json (1.11.2) + mime-types (2.99.3) + mini_portile2 (2.1.0) + minitest (5.10.1) + multi_json (1.12.1) multi_xml (0.5.5) multipart-post (2.0.0) net-scp (1.2.1) @@ -164,9 +178,9 @@ GEM net-ssh (3.0.2) netrc (0.10.3) newrelic_rpm (3.14.3.313) - nokogiri (1.6.7.2) - mini_portile2 (~> 2.0.0.rc2) - nokogiri (1.6.7.2-java) + nokogiri (1.7.0) + mini_portile2 (~> 2.1.0) + nokogiri (1.7.0-java) nyan-cat-formatter (0.11) rspec (>= 2.99, >= 2.14.2, < 4) oauth (0.4.7) @@ -178,7 +192,7 @@ GEM rack (>= 1.2, < 3) pagedown-rails (1.1.4) railties (> 3.1) - parser (2.3.0.6) + parser (2.3.3.1) ast (~> 2.2) pg (0.18.4) polyamorous (1.3.0) @@ -200,31 +214,40 @@ GEM puma (2.15.3-java) pundit (1.1.0) activesupport (>= 3.0.0) - rack (1.5.5) + rack (1.6.5) rack-mini-profiler (0.10.1) rack (>= 1.2.0) rack-test (0.6.3) rack (>= 1.0) - rails (4.1.14.1) - actionmailer (= 4.1.14.1) - actionpack (= 4.1.14.1) - actionview (= 4.1.14.1) - activemodel (= 4.1.14.1) - activerecord (= 4.1.14.1) - activesupport (= 4.1.14.1) + rails (4.2.5) + actionmailer (= 4.2.5) + actionpack (= 4.2.5) + actionview (= 4.2.5) + activejob (= 4.2.5) + activemodel (= 4.2.5) + activerecord (= 4.2.5) + activesupport (= 4.2.5) bundler (>= 1.3.0, < 2.0) - railties (= 4.1.14.1) - sprockets-rails (~> 2.0) + railties (= 4.2.5) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.8) + activesupport (>= 4.2.0.beta, < 5.0) + nokogiri (~> 1.6) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.3) + loofah (~> 2.0) rails-i18n (4.0.8) i18n (~> 0.7) railties (~> 4.0) - railties (4.1.14.1) - actionpack (= 4.1.14.1) - activesupport (= 4.1.14.1) + railties (4.2.5) + actionpack (= 4.2.5) + activesupport (= 4.2.5) rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) - rainbow (2.1.0) - rake (10.5.0) + rainbow (2.2.1) + rake (12.0.0) ransack (1.7.0) actionpack (>= 3.0) activerecord (>= 3.0) @@ -243,7 +266,7 @@ GEM rspec-mocks (~> 3.4.0) rspec-autotest (1.0.0) rspec-core (>= 2.99.0.beta1, < 4.0.0) - rspec-core (3.4.2) + rspec-core (3.4.4) rspec-support (~> 3.4.0) rspec-expectations (3.4.0) diff-lcs (>= 1.2.0, < 2.0) @@ -260,14 +283,15 @@ GEM rspec-mocks (~> 3.4.0) rspec-support (~> 3.4.0) rspec-support (3.4.1) - rubocop (0.37.2) - parser (>= 2.3.0.4, < 3.0) + rubocop (0.46.0) + parser (>= 2.3.1.1, < 3.0) powerpack (~> 0.1) rainbow (>= 1.99.1, < 3.0) ruby-progressbar (~> 1.7) - unicode-display_width (~> 0.3) - rubocop-rspec (1.4.0) - ruby-progressbar (1.7.5) + unicode-display_width (~> 1.0, >= 1.0.1) + rubocop-rspec (1.9.0) + rubocop (>= 0.42.0) + ruby-progressbar (1.8.1) rubytree (0.9.7) json (~> 1.8) structured_warnings (~> 0.2) @@ -316,7 +340,7 @@ GEM net-ssh (>= 2.8.0) structured_warnings (0.2.0) temple (0.7.6) - thor (0.19.1) + thor (0.19.4) thread_safe (0.3.5) thread_safe (0.3.5-java) tilt (1.4.1) @@ -334,7 +358,7 @@ GEM unf_ext unf (0.1.4-java) unf_ext (0.0.7.1) - unicode-display_width (0.3.1) + unicode-display_width (1.1.2) web-console (2.3.0) activemodel (>= 4.0) binding_of_caller (>= 0.7.2) @@ -395,7 +419,7 @@ DEPENDENCIES puma (~> 2.15.3) pundit rack-mini-profiler - rails (~> 4.1.13) + rails (= 4.2.5) rails-i18n (~> 4.0.0) rake ransack @@ -419,3 +443,6 @@ DEPENDENCIES uglifier (>= 1.3.0) web-console (~> 2.0) will_paginate (~> 3.0) + +BUNDLED WITH + 1.13.6 diff --git a/app/controllers/concerns/lti.rb b/app/controllers/concerns/lti.rb index cf489b7f..61559728 100644 --- a/app/controllers/concerns/lti.rb +++ b/app/controllers/concerns/lti.rb @@ -104,10 +104,8 @@ module Lti lti_parameter = LtiParameter.where(consumers_id: session[:consumer_id], external_user_id: session[:external_user_id], exercises_id: exercise_id).first - lti_parameters = JSON.parse(lti_parameter.lti_parameters) - consumer = Consumer.find_by(id: session[:consumer_id]) - provider = build_tool_provider(consumer: consumer, parameters: lti_parameters) + provider = build_tool_provider(consumer: consumer, parameters: lti_parameter.lti_parameters) # provider = build_tool_provider(consumer: Consumer.find_by(id: session[:consumer_id]), parameters: session[:lti_parameters]) if provider.nil? {status: 'error'} diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index 34bc376f..c92e8084 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -162,12 +162,10 @@ class ExercisesController < ApplicationController external_user_id: session[:external_user_id], exercises_id: @submission.exercise_id).first - lti_parameters = JSON.parse(lti_parameter.lti_parameters) - path = lti_return_path(consumer_id: session[:consumer_id], submission_id: @submission.id, url: consumer_return_url(build_tool_provider(consumer: Consumer.find_by(id: session[:consumer_id]), - parameters: lti_parameters))) + parameters: lti_parameter.lti_parameters))) # parameters: session[:lti_parameters]))) respond_to do |format| format.html { redirect_to(path) } diff --git a/bin/rails b/bin/rails index 728cd85a..5191e692 100755 --- a/bin/rails +++ b/bin/rails @@ -1,4 +1,4 @@ #!/usr/bin/env ruby -APP_PATH = File.expand_path('../../config/application', __FILE__) +APP_PATH = File.expand_path('../../config/application', __FILE__) require_relative '../config/boot' require 'rails/commands' diff --git a/bin/setup b/bin/setup new file mode 100755 index 00000000..acdb2c13 --- /dev/null +++ b/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/config/application.rb b/config/application.rb index 10a8537d..a9e3518b 100644 --- a/config/application.rb +++ b/config/application.rb @@ -1,13 +1,6 @@ require File.expand_path('../boot', __FILE__) -# Pick the frameworks you want: -require "active_model/railtie" -require "active_record/railtie" -require "action_controller/railtie" -require "action_mailer/railtie" -require "action_view/railtie" -require "sprockets/railtie" -# require "rails/test_unit/railtie" +require 'rails/all' # Require the gems listed in Gemfile, including any gems # you've limited to :test, :development, or :production. @@ -21,17 +14,22 @@ module CodeOcean # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. - config.time_zone = 'Berlin' + config.time_zone = 'UTC' # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] # config.i18n.default_locale = :de config.i18n.available_locales = [:de, :en] + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + config.autoload_paths << Rails.root.join('lib') config.eager_load_paths << Rails.root.join('lib') config.assets.precompile += %w( markdown-buttons.png ) + config.active_record.schema_format = :sql + case (RUBY_ENGINE) when 'ruby' # ... @@ -43,5 +41,3 @@ module CodeOcean end end end - -Rails.application.config.assets.precompile += %w( markdown-buttons.png ) \ No newline at end of file diff --git a/config/boot.rb b/config/boot.rb index 5e5f0c1f..6b750f00 100644 --- a/config/boot.rb +++ b/config/boot.rb @@ -1,4 +1,3 @@ -# Set up gems listed in the Gemfile. ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) -require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/config/environments/development.rb b/config/environments/development.rb index 10cc7bc8..5960bb24 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -1,7 +1,8 @@ Rails.application.configure do # Settings specified here will take precedence over those in config/application.rb. - config.web_console.whitelisted_ips = '192.168.0.0/16' + config.web_console.whitelisted_ips = '192.168.0.0/16' + # In the development environment your application's code is reloaded on # every request. This slows down response time but is perfect for development # since you don't have to restart the web server when you make code changes. @@ -13,8 +14,8 @@ Rails.application.configure do # Show full error reports and disable caching. config.consider_all_requests_local = true config.action_controller.perform_caching = false - - config.action_mailer.perform_deliveries = true + + config.action_mailer.perform_deliveries = false # Don't care if the mailer can't send. config.action_mailer.raise_delivery_errors = false @@ -25,12 +26,21 @@ Rails.application.configure do # Raise an error on page load if there are pending migrations. config.active_record.migration_error = :page_load + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + # Adds additional error checking when serving assets at runtime. # Checks for improperly declared sprockets dependencies. # Raises helpful error messages. config.assets.raise_runtime_errors = true - # Raise errors for missing translations. + # Raises error for missing translations config.action_view.raise_on_missing_translations = true BetterErrors::Middleware.allow_ip! ENV['TRUSTED_IP'] if ENV['TRUSTED_IP'] diff --git a/config/environments/production.rb b/config/environments/production.rb index 3c3fe0c5..23c4e5b4 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -16,11 +16,13 @@ Rails.application.configure do # Enable Rack::Cache to put a simple HTTP cache in front of your application # Add `rack-cache` to your Gemfile before enabling this. - # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. # config.action_dispatch.rack_cache = true - # Disable Rails's static asset server (Apache or nginx will already do this). - config.serve_static_assets = false + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? # Compress JavaScripts and CSS. config.assets.js_compressor = :uglifier @@ -29,20 +31,21 @@ Rails.application.configure do # Do not fallback to assets pipeline if a precompiled asset is missed. config.assets.compile = false - # Generate digests for assets URLs. + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. config.assets.digest = true - # Version of your assets, change this if you want to expire all your assets. - config.assets.version = '1.0' + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb # Specifies the header that your server uses for sending files. - # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache - # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx + # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. # config.force_ssl = true - # Set to :debug to see everything in the log. + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. config.log_level = :error # Prepend all log lines with the following tags. @@ -55,11 +58,7 @@ Rails.application.configure do # config.cache_store = :mem_cache_store # Enable serving of images, stylesheets, and JavaScripts from an asset server. - # config.action_controller.asset_host = "http://assets.example.com" - - # Precompile additional assets. - # application.js, application.css, and all non-JS/CSS in app/assets folder are already added. - # config.assets.precompile += %w( search.js ) + # config.action_controller.asset_host = 'http://assets.example.com' # Ignore bad email addresses and do not raise email delivery errors. # Set this to true and configure the email server for immediate delivery to raise delivery errors. @@ -72,9 +71,6 @@ Rails.application.configure do # Send deprecation notices to registered listeners. config.active_support.deprecation = :notify - # Disable automatic flushing of the log to improve performance. - # config.autoflush_log = false - # Use default logging formatter so that PID and timestamp are not suppressed. config.log_formatter = ::Logger::Formatter.new diff --git a/config/environments/test.rb b/config/environments/test.rb index 053f5b66..1c19f08b 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -12,8 +12,8 @@ Rails.application.configure do # preloads Rails for running tests, you may have to set it to true. config.eager_load = false - # Configure static asset server for tests with Cache-Control for performance. - config.serve_static_assets = true + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true config.static_cache_control = 'public, max-age=3600' # Show full error reports and disable caching. @@ -31,6 +31,9 @@ Rails.application.configure do # ActionMailer::Base.deliveries array. config.action_mailer.delivery_method = :test + # Randomize the order test cases are executed. + config.active_support.test_order = :random + # Print deprecation notices to the stderr. config.active_support.deprecation = :stderr diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb new file mode 100644 index 00000000..d74f7733 --- /dev/null +++ b/config/initializers/assets.rb @@ -0,0 +1,12 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) +Rails.application.config.assets.precompile += %w( markdown-buttons.png ) \ No newline at end of file diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb index 1e5f1e1d..bdaed01f 100644 --- a/config/initializers/session_store.rb +++ b/config/initializers/session_store.rb @@ -1,3 +1,3 @@ # Be sure to restart your server when you modify this file. -Rails.application.config.session_store :cookie_store, key: '_hands-on-programming_session' +Rails.application.config.session_store :cookie_store, key: '_code_ocean_session' diff --git a/config/locales/en.yml b/config/locales/en.yml index 6d30f612..34ebd266 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1,3 +1,24 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + en: activerecord: attributes: @@ -466,3 +487,4 @@ en: previous_label: '← Previous Page' file_template: no_template_label: "Empty File" + diff --git a/config/routes.rb b/config/routes.rb index 0683a6f1..b4606f74 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -3,7 +3,7 @@ FILENAME_REGEXP = /[\w\.]+/ unless Kernel.const_defined?(:FILENAME_REGEXP) Rails.application.routes.draw do resources :file_templates do collection do - get 'by_file_type/:file_type_id', as: :by_file_type, to: :by_file_type + get 'by_file_type/:file_type_id', as: :by_file_type, action: :by_file_type end end resources :code_harbor_links @@ -42,7 +42,7 @@ Rails.application.routes.draw do resources :execution_environments do member do get :shell - post 'shell', as: :execute_command, to: :execute_command + post 'shell', as: :execute_command, action: :execute_command get :statistics end @@ -94,14 +94,14 @@ Rails.application.routes.draw do resources :submissions, only: [:create, :index, :show] do member do - get 'download', as: :download, to: :download - get 'download/:filename', as: :download_file, constraints: {filename: FILENAME_REGEXP}, to: :download_file - get 'render/:filename', as: :render, constraints: {filename: FILENAME_REGEXP}, to: :render_file - get 'run/:filename', as: :run, constraints: {filename: FILENAME_REGEXP}, to: :run + get 'download', as: :download, action: :download + get 'download/:filename', as: :download_file, constraints: {filename: FILENAME_REGEXP}, action: :download_file + get 'render/:filename', as: :render, constraints: {filename: FILENAME_REGEXP}, action: :render_file + get 'run/:filename', as: :run, constraints: {filename: FILENAME_REGEXP}, action: :run get :score get :statistics post :stop - get 'test/:filename', as: :test, constraints: {filename: FILENAME_REGEXP}, to: :test + get 'test/:filename', as: :test, constraints: {filename: FILENAME_REGEXP}, action: :test end end diff --git a/db/migrate/20161214144837_create_lti_parameters.rb b/db/migrate/20161214144837_create_lti_parameters.rb index 890484f4..053149a6 100644 --- a/db/migrate/20161214144837_create_lti_parameters.rb +++ b/db/migrate/20161214144837_create_lti_parameters.rb @@ -4,9 +4,9 @@ class CreateLtiParameters < ActiveRecord::Migration t.string :external_user_id t.belongs_to :consumers t.belongs_to :exercises - t.column :lti_parameters, :jsonb + t.jsonb :lti_parameters, null: false, default: '{}' t.timestamps end end -end +end \ No newline at end of file diff --git a/db/schema.rb b/db/schema.rb index b7bef30a..6f5accb0 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,13 +11,13 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20161216131239) do +ActiveRecord::Schema.define(version: 20161214144837) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" - create_table "code_harbor_links", force: true do |t| - t.string "oauth2token" + create_table "code_harbor_links", force: :cascade do |t| + t.string "oauth2token", limit: 255 t.datetime "created_at" t.datetime "updated_at" t.integer "user_id" @@ -25,10 +25,10 @@ ActiveRecord::Schema.define(version: 20161216131239) do add_index "code_harbor_links", ["user_id"], name: "index_code_harbor_links_on_user_id", using: :btree - create_table "comments", force: true do |t| + create_table "comments", force: :cascade do |t| t.integer "user_id" t.integer "file_id" - t.string "user_type" + t.string "user_type", limit: 255 t.integer "row" t.integer "column" t.text "text" @@ -39,15 +39,15 @@ ActiveRecord::Schema.define(version: 20161216131239) do add_index "comments", ["file_id"], name: "index_comments_on_file_id", using: :btree add_index "comments", ["user_id"], name: "index_comments_on_user_id", using: :btree - create_table "consumers", force: true do |t| - t.string "name" + create_table "consumers", force: :cascade do |t| + t.string "name", limit: 255 t.datetime "created_at" t.datetime "updated_at" - t.string "oauth_key" - t.string "oauth_secret" + t.string "oauth_key", limit: 255 + t.string "oauth_secret", limit: 255 end - create_table "errors", force: true do |t| + create_table "errors", force: :cascade do |t| t.integer "execution_environment_id" t.text "message" t.datetime "created_at" @@ -57,123 +57,123 @@ ActiveRecord::Schema.define(version: 20161216131239) do add_index "errors", ["submission_id"], name: "index_errors_on_submission_id", using: :btree - create_table "execution_environments", force: true do |t| - t.string "docker_image" - t.string "name" + create_table "execution_environments", force: :cascade do |t| + t.string "docker_image", limit: 255 + t.string "name", limit: 255 t.datetime "created_at" t.datetime "updated_at" - t.string "run_command" - t.string "test_command" - t.string "testing_framework" + t.string "run_command", limit: 255 + t.string "test_command", limit: 255 + t.string "testing_framework", limit: 255 t.text "help" - t.string "exposed_ports" + t.string "exposed_ports", limit: 255 t.integer "permitted_execution_time" t.integer "user_id" - t.string "user_type" + t.string "user_type", limit: 255 t.integer "pool_size" t.integer "file_type_id" t.integer "memory_limit" t.boolean "network_enabled" end - create_table "exercises", force: true do |t| + create_table "exercises", force: :cascade do |t| t.text "description" t.integer "execution_environment_id" - t.string "title" + t.string "title", limit: 255 t.datetime "created_at" t.datetime "updated_at" t.integer "user_id" t.text "instructions" t.boolean "public" - t.string "user_type" - t.string "token" + t.string "user_type", limit: 255 + t.string "token", limit: 255 t.boolean "hide_file_tree" t.boolean "allow_file_creation" - t.boolean "allow_auto_completion", default: false + t.boolean "allow_auto_completion", default: false end - create_table "external_users", force: true do |t| + create_table "external_users", force: :cascade do |t| t.integer "consumer_id" - t.string "email" - t.string "external_id" - t.string "name" + t.string "email", limit: 255 + t.string "external_id", limit: 255 + t.string "name", limit: 255 t.datetime "created_at" t.datetime "updated_at" end - create_table "file_templates", force: true do |t| - t.string "name" + create_table "file_templates", force: :cascade do |t| + t.string "name", limit: 255 t.text "content" t.integer "file_type_id" t.datetime "created_at" t.datetime "updated_at" end - create_table "file_types", force: true do |t| - t.string "editor_mode" - t.string "file_extension" + create_table "file_types", force: :cascade do |t| + t.string "editor_mode", limit: 255 + t.string "file_extension", limit: 255 t.integer "indent_size" - t.string "name" + t.string "name", limit: 255 t.integer "user_id" t.datetime "created_at" t.datetime "updated_at" t.boolean "executable" t.boolean "renderable" - t.string "user_type" + t.string "user_type", limit: 255 t.boolean "binary" end - create_table "files", force: true do |t| + create_table "files", force: :cascade do |t| t.text "content" t.integer "context_id" - t.string "context_type" + t.string "context_type", limit: 255 t.integer "file_id" t.integer "file_type_id" t.boolean "hidden" - t.string "name" + t.string "name", limit: 255 t.boolean "read_only" t.datetime "created_at" t.datetime "updated_at" - t.string "native_file" - t.string "role" - t.string "hashed_content" - t.string "feedback_message" + t.string "native_file", limit: 255 + t.string "role", limit: 255 + t.string "hashed_content", limit: 255 + t.string "feedback_message", limit: 255 t.float "weight" - t.string "path" + t.string "path", limit: 255 t.integer "file_template_id" end add_index "files", ["context_id", "context_type"], name: "index_files_on_context_id_and_context_type", using: :btree - create_table "hints", force: true do |t| + create_table "hints", force: :cascade do |t| t.integer "execution_environment_id" - t.string "locale" + t.string "locale", limit: 255 t.text "message" - t.string "name" - t.string "regular_expression" + t.string "name", limit: 255 + t.string "regular_expression", limit: 255 t.datetime "created_at" t.datetime "updated_at" end - create_table "internal_users", force: true do |t| + create_table "internal_users", force: :cascade do |t| t.integer "consumer_id" - t.string "email" - t.string "name" - t.string "role" + t.string "email", limit: 255 + t.string "name", limit: 255 + t.string "role", limit: 255 t.datetime "created_at" t.datetime "updated_at" - t.string "crypted_password" - t.string "salt" - t.integer "failed_logins_count", default: 0 + t.string "crypted_password", limit: 255 + t.string "salt", limit: 255 + t.integer "failed_logins_count", default: 0 t.datetime "lock_expires_at" - t.string "unlock_token" - t.string "remember_me_token" + t.string "unlock_token", limit: 255 + t.string "remember_me_token", limit: 255 t.datetime "remember_me_token_expires_at" - t.string "reset_password_token" + t.string "reset_password_token", limit: 255 t.datetime "reset_password_token_expires_at" t.datetime "reset_password_email_sent_at" - t.string "activation_state" - t.string "activation_token" + t.string "activation_state", limit: 255 + t.string "activation_token", limit: 255 t.datetime "activation_token_expires_at" end @@ -182,29 +182,38 @@ ActiveRecord::Schema.define(version: 20161216131239) do add_index "internal_users", ["remember_me_token"], name: "index_internal_users_on_remember_me_token", using: :btree add_index "internal_users", ["reset_password_token"], name: "index_internal_users_on_reset_password_token", using: :btree - create_table "request_for_comments", force: true do |t| - t.integer "user_id", null: false - t.integer "exercise_id", null: false - t.integer "file_id", null: false + create_table "lti_parameters", force: :cascade do |t| + t.string "external_user_id" + t.integer "consumers_id" + t.integer "exercises_id" + t.jsonb "lti_parameters", default: {}, null: false t.datetime "created_at" t.datetime "updated_at" - t.string "user_type" + end + + create_table "request_for_comments", force: :cascade do |t| + t.integer "user_id", null: false + t.integer "exercise_id", null: false + t.integer "file_id", null: false + t.datetime "created_at" + t.datetime "updated_at" + t.string "user_type", limit: 255 t.text "question" t.boolean "solved" t.integer "submission_id" end - create_table "submissions", force: true do |t| + create_table "submissions", force: :cascade do |t| t.integer "exercise_id" t.float "score" t.integer "user_id" t.datetime "created_at" t.datetime "updated_at" - t.string "cause" - t.string "user_type" + t.string "cause", limit: 255 + t.string "user_type", limit: 255 end - create_table "testruns", force: true do |t| + create_table "testruns", force: :cascade do |t| t.boolean "passed" t.text "output" t.integer "file_id" diff --git a/db/structure.sql b/db/structure.sql new file mode 100644 index 00000000..298a1e32 --- /dev/null +++ b/db/structure.sql @@ -0,0 +1,1227 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 9.5.5 +-- Dumped by pg_dump version 9.5.5 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SET check_function_bodies = false; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - +-- + +CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; + + +-- +-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - +-- + +COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; + + +SET search_path = public, pg_catalog; + +SET default_tablespace = ''; + +SET default_with_oids = false; + +-- +-- Name: code_harbor_links; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE code_harbor_links ( + id integer NOT NULL, + oauth2token character varying(255), + created_at timestamp without time zone, + updated_at timestamp without time zone, + user_id integer +); + + +-- +-- Name: code_harbor_links_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE code_harbor_links_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: code_harbor_links_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE code_harbor_links_id_seq OWNED BY code_harbor_links.id; + + +-- +-- Name: comments; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE comments ( + id integer NOT NULL, + user_id integer, + file_id integer, + user_type character varying(255), + "row" integer, + "column" integer, + text text, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: comments_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE comments_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: comments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE comments_id_seq OWNED BY comments.id; + + +-- +-- Name: consumers; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE consumers ( + id integer NOT NULL, + name character varying(255), + created_at timestamp without time zone, + updated_at timestamp without time zone, + oauth_key character varying(255), + oauth_secret character varying(255) +); + + +-- +-- Name: consumers_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE consumers_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: consumers_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE consumers_id_seq OWNED BY consumers.id; + + +-- +-- Name: errors; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE errors ( + id integer NOT NULL, + execution_environment_id integer, + message text, + created_at timestamp without time zone, + updated_at timestamp without time zone, + submission_id integer +); + + +-- +-- Name: errors_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE errors_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: errors_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE errors_id_seq OWNED BY errors.id; + + +-- +-- Name: execution_environments; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE execution_environments ( + id integer NOT NULL, + docker_image character varying(255), + name character varying(255), + created_at timestamp without time zone, + updated_at timestamp without time zone, + run_command character varying(255), + test_command character varying(255), + testing_framework character varying(255), + help text, + exposed_ports character varying(255), + permitted_execution_time integer, + user_id integer, + user_type character varying(255), + pool_size integer, + file_type_id integer, + memory_limit integer, + network_enabled boolean +); + + +-- +-- Name: execution_environments_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE execution_environments_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: execution_environments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE execution_environments_id_seq OWNED BY execution_environments.id; + + +-- +-- Name: exercises; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE exercises ( + id integer NOT NULL, + description text, + execution_environment_id integer, + title character varying(255), + created_at timestamp without time zone, + updated_at timestamp without time zone, + user_id integer, + instructions text, + public boolean, + user_type character varying(255), + token character varying(255), + hide_file_tree boolean, + allow_file_creation boolean, + allow_auto_completion boolean DEFAULT false +); + + +-- +-- Name: exercises_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE exercises_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: exercises_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE exercises_id_seq OWNED BY exercises.id; + + +-- +-- Name: external_users; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE external_users ( + id integer NOT NULL, + consumer_id integer, + email character varying(255), + external_id character varying(255), + name character varying(255), + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: external_users_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE external_users_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: external_users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE external_users_id_seq OWNED BY external_users.id; + + +-- +-- Name: file_templates; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE file_templates ( + id integer NOT NULL, + name character varying(255), + content text, + file_type_id integer, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: file_templates_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE file_templates_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: file_templates_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE file_templates_id_seq OWNED BY file_templates.id; + + +-- +-- Name: file_types; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE file_types ( + id integer NOT NULL, + editor_mode character varying(255), + file_extension character varying(255), + indent_size integer, + name character varying(255), + user_id integer, + created_at timestamp without time zone, + updated_at timestamp without time zone, + executable boolean, + renderable boolean, + user_type character varying(255), + "binary" boolean +); + + +-- +-- Name: file_types_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE file_types_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: file_types_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE file_types_id_seq OWNED BY file_types.id; + + +-- +-- Name: files; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE files ( + id integer NOT NULL, + content text, + context_id integer, + context_type character varying(255), + file_id integer, + file_type_id integer, + hidden boolean, + name character varying(255), + read_only boolean, + created_at timestamp without time zone, + updated_at timestamp without time zone, + native_file character varying(255), + role character varying(255), + hashed_content character varying(255), + feedback_message character varying(255), + weight double precision, + path character varying(255), + file_template_id integer +); + + +-- +-- Name: files_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE files_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: files_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE files_id_seq OWNED BY files.id; + + +-- +-- Name: hints; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE hints ( + id integer NOT NULL, + execution_environment_id integer, + locale character varying(255), + message text, + name character varying(255), + regular_expression character varying(255), + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: hints_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE hints_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: hints_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE hints_id_seq OWNED BY hints.id; + + +-- +-- Name: internal_users; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE internal_users ( + id integer NOT NULL, + consumer_id integer, + email character varying(255), + name character varying(255), + role character varying(255), + created_at timestamp without time zone, + updated_at timestamp without time zone, + crypted_password character varying(255), + salt character varying(255), + failed_logins_count integer DEFAULT 0, + lock_expires_at timestamp without time zone, + unlock_token character varying(255), + remember_me_token character varying(255), + remember_me_token_expires_at timestamp without time zone, + reset_password_token character varying(255), + reset_password_token_expires_at timestamp without time zone, + reset_password_email_sent_at timestamp without time zone, + activation_state character varying(255), + activation_token character varying(255), + activation_token_expires_at timestamp without time zone +); + + +-- +-- Name: internal_users_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE internal_users_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: internal_users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE internal_users_id_seq OWNED BY internal_users.id; + + +-- +-- Name: internal_users_teams; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE internal_users_teams ( + id integer NOT NULL, + internal_user_id integer, + team_id integer +); + + +-- +-- Name: internal_users_teams_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE internal_users_teams_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: internal_users_teams_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE internal_users_teams_id_seq OWNED BY internal_users_teams.id; + + +-- +-- Name: lti_parameters; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE lti_parameters ( + id integer NOT NULL, + external_user_id character varying, + consumers_id integer, + exercises_id integer, + lti_parameters jsonb DEFAULT '{}'::jsonb NOT NULL, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: lti_parameters_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE lti_parameters_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: lti_parameters_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE lti_parameters_id_seq OWNED BY lti_parameters.id; + + +-- +-- Name: request_for_comments; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE request_for_comments ( + id integer NOT NULL, + user_id integer NOT NULL, + exercise_id integer NOT NULL, + file_id integer NOT NULL, + created_at timestamp without time zone, + updated_at timestamp without time zone, + user_type character varying(255), + question text, + solved boolean, + submission_id integer +); + + +-- +-- Name: request_for_comments_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE request_for_comments_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: request_for_comments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE request_for_comments_id_seq OWNED BY request_for_comments.id; + + +-- +-- Name: schema_migrations; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE schema_migrations ( + version character varying NOT NULL +); + + +-- +-- Name: submissions; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE submissions ( + id integer NOT NULL, + exercise_id integer, + score double precision, + user_id integer, + created_at timestamp without time zone, + updated_at timestamp without time zone, + cause character varying(255), + user_type character varying(255) +); + + +-- +-- Name: submissions_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE submissions_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: submissions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE submissions_id_seq OWNED BY submissions.id; + + +-- +-- Name: teams; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE teams ( + id integer NOT NULL, + name character varying, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: teams_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE teams_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: teams_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE teams_id_seq OWNED BY teams.id; + + +-- +-- Name: testruns; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE testruns ( + id integer NOT NULL, + passed boolean, + output text, + file_id integer, + submission_id integer, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +-- +-- Name: testruns_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE testruns_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: testruns_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE testruns_id_seq OWNED BY testruns.id; + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY code_harbor_links ALTER COLUMN id SET DEFAULT nextval('code_harbor_links_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY comments ALTER COLUMN id SET DEFAULT nextval('comments_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY consumers ALTER COLUMN id SET DEFAULT nextval('consumers_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY errors ALTER COLUMN id SET DEFAULT nextval('errors_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY execution_environments ALTER COLUMN id SET DEFAULT nextval('execution_environments_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY exercises ALTER COLUMN id SET DEFAULT nextval('exercises_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY external_users ALTER COLUMN id SET DEFAULT nextval('external_users_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY file_templates ALTER COLUMN id SET DEFAULT nextval('file_templates_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY file_types ALTER COLUMN id SET DEFAULT nextval('file_types_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY files ALTER COLUMN id SET DEFAULT nextval('files_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY hints ALTER COLUMN id SET DEFAULT nextval('hints_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY internal_users ALTER COLUMN id SET DEFAULT nextval('internal_users_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY internal_users_teams ALTER COLUMN id SET DEFAULT nextval('internal_users_teams_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY lti_parameters ALTER COLUMN id SET DEFAULT nextval('lti_parameters_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY request_for_comments ALTER COLUMN id SET DEFAULT nextval('request_for_comments_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY submissions ALTER COLUMN id SET DEFAULT nextval('submissions_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY teams ALTER COLUMN id SET DEFAULT nextval('teams_id_seq'::regclass); + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY testruns ALTER COLUMN id SET DEFAULT nextval('testruns_id_seq'::regclass); + + +-- +-- Name: code_harbor_links_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY code_harbor_links + ADD CONSTRAINT code_harbor_links_pkey PRIMARY KEY (id); + + +-- +-- Name: comments_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY comments + ADD CONSTRAINT comments_pkey PRIMARY KEY (id); + + +-- +-- Name: consumers_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY consumers + ADD CONSTRAINT consumers_pkey PRIMARY KEY (id); + + +-- +-- Name: errors_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY errors + ADD CONSTRAINT errors_pkey PRIMARY KEY (id); + + +-- +-- Name: execution_environments_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY execution_environments + ADD CONSTRAINT execution_environments_pkey PRIMARY KEY (id); + + +-- +-- Name: exercises_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY exercises + ADD CONSTRAINT exercises_pkey PRIMARY KEY (id); + + +-- +-- Name: external_users_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY external_users + ADD CONSTRAINT external_users_pkey PRIMARY KEY (id); + + +-- +-- Name: file_templates_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY file_templates + ADD CONSTRAINT file_templates_pkey PRIMARY KEY (id); + + +-- +-- Name: file_types_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY file_types + ADD CONSTRAINT file_types_pkey PRIMARY KEY (id); + + +-- +-- Name: files_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY files + ADD CONSTRAINT files_pkey PRIMARY KEY (id); + + +-- +-- Name: hints_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY hints + ADD CONSTRAINT hints_pkey PRIMARY KEY (id); + + +-- +-- Name: internal_users_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY internal_users + ADD CONSTRAINT internal_users_pkey PRIMARY KEY (id); + + +-- +-- Name: internal_users_teams_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY internal_users_teams + ADD CONSTRAINT internal_users_teams_pkey PRIMARY KEY (id); + + +-- +-- Name: lti_parameters_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY lti_parameters + ADD CONSTRAINT lti_parameters_pkey PRIMARY KEY (id); + + +-- +-- Name: request_for_comments_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY request_for_comments + ADD CONSTRAINT request_for_comments_pkey PRIMARY KEY (id); + + +-- +-- Name: submissions_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY submissions + ADD CONSTRAINT submissions_pkey PRIMARY KEY (id); + + +-- +-- Name: teams_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY teams + ADD CONSTRAINT teams_pkey PRIMARY KEY (id); + + +-- +-- Name: testruns_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY testruns + ADD CONSTRAINT testruns_pkey PRIMARY KEY (id); + + +-- +-- Name: index_code_harbor_links_on_user_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_code_harbor_links_on_user_id ON code_harbor_links USING btree (user_id); + + +-- +-- Name: index_comments_on_file_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_comments_on_file_id ON comments USING btree (file_id); + + +-- +-- Name: index_comments_on_user_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_comments_on_user_id ON comments USING btree (user_id); + + +-- +-- Name: index_errors_on_submission_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_errors_on_submission_id ON errors USING btree (submission_id); + + +-- +-- Name: index_files_on_context_id_and_context_type; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_files_on_context_id_and_context_type ON files USING btree (context_id, context_type); + + +-- +-- Name: index_internal_users_on_activation_token; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_internal_users_on_activation_token ON internal_users USING btree (activation_token); + + +-- +-- Name: index_internal_users_on_email; Type: INDEX; Schema: public; Owner: - +-- + +CREATE UNIQUE INDEX index_internal_users_on_email ON internal_users USING btree (email); + + +-- +-- Name: index_internal_users_on_remember_me_token; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_internal_users_on_remember_me_token ON internal_users USING btree (remember_me_token); + + +-- +-- Name: index_internal_users_on_reset_password_token; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_internal_users_on_reset_password_token ON internal_users USING btree (reset_password_token); + + +-- +-- Name: index_internal_users_teams_on_internal_user_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_internal_users_teams_on_internal_user_id ON internal_users_teams USING btree (internal_user_id); + + +-- +-- Name: index_internal_users_teams_on_team_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_internal_users_teams_on_team_id ON internal_users_teams USING btree (team_id); + + +-- +-- Name: unique_schema_migrations; Type: INDEX; Schema: public; Owner: - +-- + +CREATE UNIQUE INDEX unique_schema_migrations ON schema_migrations USING btree (version); + + +-- +-- PostgreSQL database dump complete +-- + +SET search_path TO "$user", public; + +INSERT INTO schema_migrations (version) VALUES ('20140625134118'); + +INSERT INTO schema_migrations (version) VALUES ('20140626143132'); + +INSERT INTO schema_migrations (version) VALUES ('20140626144036'); + +INSERT INTO schema_migrations (version) VALUES ('20140630093736'); + +INSERT INTO schema_migrations (version) VALUES ('20140630111215'); + +INSERT INTO schema_migrations (version) VALUES ('20140701120126'); + +INSERT INTO schema_migrations (version) VALUES ('20140701122345'); + +INSERT INTO schema_migrations (version) VALUES ('20140702100130'); + +INSERT INTO schema_migrations (version) VALUES ('20140703070749'); + +INSERT INTO schema_migrations (version) VALUES ('20140716153147'); + +INSERT INTO schema_migrations (version) VALUES ('20140717074902'); + +INSERT INTO schema_migrations (version) VALUES ('20140722125431'); + +INSERT INTO schema_migrations (version) VALUES ('20140723135530'); + +INSERT INTO schema_migrations (version) VALUES ('20140723135747'); + +INSERT INTO schema_migrations (version) VALUES ('20140724155359'); + +INSERT INTO schema_migrations (version) VALUES ('20140730114343'); + +INSERT INTO schema_migrations (version) VALUES ('20140730115010'); + +INSERT INTO schema_migrations (version) VALUES ('20140805161431'); + +INSERT INTO schema_migrations (version) VALUES ('20140812102114'); + +INSERT INTO schema_migrations (version) VALUES ('20140812144733'); + +INSERT INTO schema_migrations (version) VALUES ('20140812150607'); + +INSERT INTO schema_migrations (version) VALUES ('20140812150925'); + +INSERT INTO schema_migrations (version) VALUES ('20140813091722'); + +INSERT INTO schema_migrations (version) VALUES ('20140820170039'); + +INSERT INTO schema_migrations (version) VALUES ('20140821064318'); + +INSERT INTO schema_migrations (version) VALUES ('20140823172643'); + +INSERT INTO schema_migrations (version) VALUES ('20140823173923'); + +INSERT INTO schema_migrations (version) VALUES ('20140825121336'); + +INSERT INTO schema_migrations (version) VALUES ('20140825125801'); + +INSERT INTO schema_migrations (version) VALUES ('20140825154202'); + +INSERT INTO schema_migrations (version) VALUES ('20140825161350'); + +INSERT INTO schema_migrations (version) VALUES ('20140825161358'); + +INSERT INTO schema_migrations (version) VALUES ('20140825161406'); + +INSERT INTO schema_migrations (version) VALUES ('20140826073318'); + +INSERT INTO schema_migrations (version) VALUES ('20140826073319'); + +INSERT INTO schema_migrations (version) VALUES ('20140826073320'); + +INSERT INTO schema_migrations (version) VALUES ('20140826073321'); + +INSERT INTO schema_migrations (version) VALUES ('20140826073322'); + +INSERT INTO schema_migrations (version) VALUES ('20140827065359'); + +INSERT INTO schema_migrations (version) VALUES ('20140827083957'); + +INSERT INTO schema_migrations (version) VALUES ('20140829141913'); + +INSERT INTO schema_migrations (version) VALUES ('20140903093436'); + +INSERT INTO schema_migrations (version) VALUES ('20140903165113'); + +INSERT INTO schema_migrations (version) VALUES ('20140904082810'); + +INSERT INTO schema_migrations (version) VALUES ('20140909115430'); + +INSERT INTO schema_migrations (version) VALUES ('20140915095420'); + +INSERT INTO schema_migrations (version) VALUES ('20140915122846'); + +INSERT INTO schema_migrations (version) VALUES ('20140918063522'); + +INSERT INTO schema_migrations (version) VALUES ('20140922161120'); + +INSERT INTO schema_migrations (version) VALUES ('20140922161226'); + +INSERT INTO schema_migrations (version) VALUES ('20141003072729'); + +INSERT INTO schema_migrations (version) VALUES ('20141004114747'); + +INSERT INTO schema_migrations (version) VALUES ('20141009110434'); + +INSERT INTO schema_migrations (version) VALUES ('20141011145303'); + +INSERT INTO schema_migrations (version) VALUES ('20141017110211'); + +INSERT INTO schema_migrations (version) VALUES ('20141031161603'); + +INSERT INTO schema_migrations (version) VALUES ('20141119131607'); + +INSERT INTO schema_migrations (version) VALUES ('20150128083123'); + +INSERT INTO schema_migrations (version) VALUES ('20150128084834'); + +INSERT INTO schema_migrations (version) VALUES ('20150128093003'); + +INSERT INTO schema_migrations (version) VALUES ('20150204080832'); + +INSERT INTO schema_migrations (version) VALUES ('20150310150712'); + +INSERT INTO schema_migrations (version) VALUES ('20150317083739'); + +INSERT INTO schema_migrations (version) VALUES ('20150317115338'); + +INSERT INTO schema_migrations (version) VALUES ('20150327141740'); + +INSERT INTO schema_migrations (version) VALUES ('20150408155923'); + +INSERT INTO schema_migrations (version) VALUES ('20150421074734'); + +INSERT INTO schema_migrations (version) VALUES ('20150818141554'); + +INSERT INTO schema_migrations (version) VALUES ('20150818142251'); + +INSERT INTO schema_migrations (version) VALUES ('20150903152727'); + +INSERT INTO schema_migrations (version) VALUES ('20150922125415'); + +INSERT INTO schema_migrations (version) VALUES ('20160204094409'); + +INSERT INTO schema_migrations (version) VALUES ('20160204111716'); + +INSERT INTO schema_migrations (version) VALUES ('20160302133540'); + +INSERT INTO schema_migrations (version) VALUES ('20160426114951'); + +INSERT INTO schema_migrations (version) VALUES ('20160510145341'); + +INSERT INTO schema_migrations (version) VALUES ('20160512131539'); + +INSERT INTO schema_migrations (version) VALUES ('20160609185708'); + +INSERT INTO schema_migrations (version) VALUES ('20160610111602'); + +INSERT INTO schema_migrations (version) VALUES ('20160624130951'); + +INSERT INTO schema_migrations (version) VALUES ('20160630154310'); + +INSERT INTO schema_migrations (version) VALUES ('20160701092140'); + +INSERT INTO schema_migrations (version) VALUES ('20160704143402'); + +INSERT INTO schema_migrations (version) VALUES ('20160907123009'); + +INSERT INTO schema_migrations (version) VALUES ('20161214144837'); + diff --git a/debian_installer/setup_debian_vm.sh b/debian_installer/setup_debian_vm.sh index a06c7484..8759157d 100644 --- a/debian_installer/setup_debian_vm.sh +++ b/debian_installer/setup_debian_vm.sh @@ -77,8 +77,8 @@ debian_installer/setup_debian_7_create_tables.sh # Protocol TCP Host port 3030, guest port 3000, name CodeOcean, other left blank. # That's all! -# Start Puma server on VM -# rails s -p 8080 +# Start Puma server on VM (since we upgraded to rails 4.2.5, it is necessary to specify the address here as well. Otherwise, we can't connect from the host machine) +# rails s -b 0.0.0.0 -p 8080 # To connect to Ruby app use #http://127.0.0.1:3030