Canvas LMS/Upgrading

From r00tedvw.com wiki
(Difference between revisions)
Jump to: navigation, search
(Database Migrations)
(Set Permissions)
 
(20 intermediate revisions by one user not shown)
Line 20: Line 20:
 
  <nowiki>~/var/canvas$ bundle update addressable
 
  <nowiki>~/var/canvas$ bundle update addressable
 
~/var/canvas$ bundle install</nowiki>
 
~/var/canvas$ bundle install</nowiki>
====Reason:====
+
 
 +
==Upgrade and Install Node Modules==
 +
<nowiki>~/var/canvas$ npm install</nowiki>
 +
==Set Permissions==
 +
You'll need to temporarily change permissions to allow the update (my user that performs updates is helpdesk):
 +
<nowiki>/var/canvas$ sudo chmod 660 ./config/*.yml
 +
/var/canvas$ sudo chown canvasuser:helpdesk ./config/*.yml</nowiki>
 +
 
 +
==Complied Assets==
 +
With the permissions set:
 +
<nowiki>~/var/canvas$ RAILS_ENV=production bundle exec rake canvas:compile_assets</nowiki>
 +
 
 +
==Database Migrations==
 +
With the permissions set:
 +
<nowiki>~/var/canvas$ RAILS_ENV=production bundle exec rake db:migrate</nowiki>
 +
For some odd reason I still got an unspecified error, even with the permissions set.  I ran it a second time with --trace so I could see a more verbose error output and it completed successfully?
 +
{| class="mw-collapsible mw-collapsed wikitable" width="90%"
 +
!Error
 +
|-
 +
| <pre style="font-weight: bold">
 +
helpdesk@university:/var/canvas$ RAILS_ENV=production bundle exec rake db:migrate</pre>
 +
<pre>
 +
1: production:public
 +
==  AddWorkflowStateToDeveloperKeys: migrating ================================
 +
-- add_column(:developer_keys, :workflow_state, :string, {:null=>false, :default=>"active"})
 +
  -> 0.1300s
 +
==  AddWorkflowStateToDeveloperKeys: migrated (0.1303s) =======================
 +
 
 +
==  DisallowNullDeveloperKey: migrating =======================================
 +
-- change_column_null(:access_tokens, :developer_key_id, false)
 +
  -> 0.0018s
 +
==  DisallowNullDeveloperKey: migrated (3.7544s) ==============================
 +
 
 +
==  NeedsMoreTurnitinId: migrating ============================================
 +
-- add_column(:assignments, :turnitin_id, :integer, {:limit=>8})
 +
  -> 0.0024s
 +
-- add_column(:users, :turnitin_id, :integer, {:limit=>8})
 +
  -> 0.0018s
 +
==  NeedsMoreTurnitinId: migrated (0.0045s) ===================================
 +
 
 +
==  CreateLearningOutcomeQuestionResults: migrating ===========================
 +
-- create_table(:learning_outcome_question_results)
 +
  -> 0.0176s
 +
-- add_index("learning_outcome_question_results", [:learning_outcome_id], {:name=>"index_learning_outcome_question_results_on_learning_outcome_id"})
 +
  -> 0.0057s
 +
-- add_index("learning_outcome_question_results", [:learning_outcome_result_id], {:name=>"index_LOQR_on_learning_outcome_result_id"})
 +
  -> 0.0037s
 +
==  CreateLearningOutcomeQuestionResults: migrated (0.0274s) ==================
 +
 
 +
==  AddParentMd5ToBrandConfigs: migrating =====================================
 +
-- add_column(:brand_configs, :parent_md5, :string)
 +
  -> 0.0016s
 +
==  AddParentMd5ToBrandConfigs: migrated (0.0017s) ============================
 +
 
 +
==  AddLtiMessageHandlerIdToLtiResourcePlacements: migrating ==================
 +
-- add_column(:lti_resource_placements, :message_handler_id, :bigint)
 +
  -> 0.0023s
 +
-- add_foreign_key(:lti_resource_placements, :lti_message_handlers, {:column=>:message_handler_id})
 +
  -> 0.0146s
 +
-- add_index(:lti_resource_placements, [:placement, :message_handler_id], {:unique=>true, :where=>"message_handler_id IS NOT NULL", :name=>"index_resource_placements_on_placement_and_message_handler"})
 +
  -> 0.0059s
 +
==  AddLtiMessageHandlerIdToLtiResourcePlacements: migrated (0.0234s) =========
 +
 
 +
==  CreateEpubExports: migrating ==============================================
 +
-- create_table(:epub_exports)
 +
  -> 0.0096s
 +
-- add_foreign_key_if_not_exists(:epub_exports, :users, {:delay_validation=>true})
 +
  -> 0.0068s
 +
-- add_foreign_key_if_not_exists(:epub_exports, :courses, {:delay_validation=>true})
 +
  -> 0.0315s
 +
-- add_foreign_key_if_not_exists(:epub_exports, :content_exports, {:delay_validation=>true})
 +
  -> 0.0088s
 +
-- add_index(:epub_exports, :user_id)
 +
  -> 0.0042s
 +
-- add_index(:epub_exports, :course_id)
 +
  -> 0.0038s
 +
-- add_index(:epub_exports, :content_export_id)
 +
  -> 0.0053s
 +
==  CreateEpubExports: migrated (0.0710s) =====================================
 +
 
 +
==  AddLtiMessageHandlerIdToLtiResourcePlacementsDataFromResourceHandler: migrating
 +
==  AddLtiMessageHandlerIdToLtiResourcePlacementsDataFromResourceHandler: migrated (0.0354s)
 +
 
 +
==  AddAssignmentModeratedGrading: migrating ==================================
 +
-- add_column(:assignments, :moderated_grading, :boolean)
 +
  -> 0.0010s
 +
==  AddAssignmentModeratedGrading: migrated (0.0013s) =========================
 +
 
 +
==  CreateModeratedGradingProvisionalGrades: migrating ========================
 +
-- create_table(:moderated_grading_provisional_grades)
 +
  -> 0.0354s
 +
-- add_index(:moderated_grading_provisional_grades, :submission_id)
 +
  -> 0.0107s
 +
-- add_index(:moderated_grading_provisional_grades, [:submission_id, :position], {:unique=>true, :name=>:idx_mg_provisional_grades_unique_submission_position})
 +
  -> 0.0034s
 +
-- add_foreign_key(:moderated_grading_provisional_grades, :submissions)
 +
  -> 0.0057s
 +
-- add_foreign_key(:moderated_grading_provisional_grades, :users, {:column=>:scorer_id})
 +
  -> 0.0020s
 +
==  CreateModeratedGradingProvisionalGrades: migrated (0.0579s) ===============
 +
 
 +
==  AddHasAnnotationsToCanvadocs: migrating ===================================
 +
-- add_column(:canvadocs, :has_annotations, :bool)
 +
  -> 0.0019s
 +
==  AddHasAnnotationsToCanvadocs: migrated (0.0021s) ==========================
 +
 
 +
==  AddProvisionalGradeIdToSubmissionComments: migrating ======================
 +
-- add_column(:submission_comments, :provisional_grade_id, :integer, {:limit=>8})
 +
  -> 0.0012s
 +
-- add_foreign_key(:submission_comments, :moderated_grading_provisional_grades, {:column=>:provisional_grade_id})
 +
  -> 0.0067s
 +
==  AddProvisionalGradeIdToSubmissionComments: migrated (0.0083s) =============
 +
 
 +
==  AddMaxConcurrentToJobs: migrating =========================================
 +
-- add_column(:delayed_jobs, :max_concurrent, :integer, {:default=>1, :null=>false})
 +
  -> 0.0881s
 +
-- execute("      CREATE OR REPLACE FUNCTION \"delayed_jobs_before_insert_row_tr_fn\" () RETURNS trigger AS $$\n      BEGIN\n        IF NEW.strand IS NOT NULL THEN\n          PERFORM pg_advisory_xact_lock(half_md5_as_bigint(NEW.strand));\n          IF (SELECT COUNT(*) FROM delayed_jobs WHERE strand = NEW.strand) >= NEW.max_concurrent THEN\n            NEW.next_in_strand := 'f';\n          END IF;\n        END IF;\n        RETURN NEW;\n      END;\n      $$ LANGUAGE plpgsql SET search_path TO public;\n")
 +
  -> 0.0265s
 +
-- execute("      CREATE OR REPLACE FUNCTION \"delayed_jobs_after_delete_row_tr_fn\" () RETURNS trigger AS $$\n      BEGIN\n        IF OLD.strand IS NOT NULL THEN\n          PERFORM pg_advisory_xact_lock(half_md5_as_bigint(OLD.strand));\n          IF (SELECT COUNT(*) FROM delayed_jobs WHERE strand = OLD.strand AND next_in_strand = 't') < OLD.max_concurrent THEN\n            UPDATE delayed_jobs SET next_in_strand = 't' WHERE id = (\n              SELECT id FROM delayed_jobs j2 WHERE next_in_strand = 'f' AND\n              j2.strand = OLD.strand ORDER BY j2.id ASC LIMIT 1 FOR UPDATE\n            );\n          END IF;\n        END IF;\n        RETURN OLD;\n      END;\n      $$ LANGUAGE plpgsql SET search_path TO public;\n")
 +
  -> 0.0012s
 +
==  AddMaxConcurrentToJobs: migrated (0.1166s) ================================
 +
 
 +
==  DropLtiResourceHandlerFromLtiResourcePlacement: migrating =================
 +
-- remove_column(:lti_resource_placements, :resource_handler_id)
 +
  -> 0.0081s
 +
==  DropLtiResourceHandlerFromLtiResourcePlacement: migrated (0.0082s) ========
 +
 
 +
==  AddNotificationCategoryToStreamItems: migrating ===========================
 +
-- add_column(:stream_items, :notification_category, :string)
 +
  -> 0.0012s
 +
-- add_index(:stream_items, :notification_category, {:algorithm=>:concurrently})
 +
  -> 0.0149s
 +
==  AddNotificationCategoryToStreamItems: migrated (0.0164s) ==================
 +
 
 +
==  PopulateStreamItemNotificationCategory: migrating =========================
 +
==  PopulateStreamItemNotificationCategory: migrated (0.0015s) ================
 +
</pre>
 +
<pre style="color: red">
 +
NOTICE:  there is no transaction in progress
 +
rake aborted!
 +
StandardError: An error has occurred, this and all later migrations canceled:
 +
 
 +
unknown attribute: max_concurrent/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/attribute_assignment.rb:88:in `block in assign_attributes'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/attribute_assignment.rb:78:in `each'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/attribute_assignment.rb:78:in `assign_attributes'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/base.rb:498:in `initialize'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/aroi-0.0.3/lib/aroi/instrumentation/active_record.rb:34:in `block in initialize'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/notifications.rb:123:in `block in instrument'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/notifications.rb:123:in `instrument'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/aroi-0.0.3/lib/aroi/instrumentation/active_record.rb:33:in `initialize'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/persistence.rb:44:in `new'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/persistence.rb:44:in `create'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/canvas-jobs-0.10.3/lib/delayed/backend/base.rb:76:in `enqueue'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/canvas-jobs-0.10.3/lib/delayed/message_sending.rb:28:in `block in send_later_enqueue_args'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/database_statements.rb:21:in `call'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/database_statements.rb:21:in `block in _run_after_transaction_commit_callbacks'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/database_statements.rb:21:in `each'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/database_statements.rb:21:in `_run_after_transaction_commit_callbacks'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/rails3.rb:4:in `commit_transaction_records_with_callbacks'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/database_statements.rb:218:in `transaction'
 +
/var/canvas/config/initializers/active_record.rb:1677:in `ddl_transaction'
 +
/var/canvas/config/initializers/active_record.rb:1661:in `block in migrate'
 +
/var/canvas/config/initializers/active_record.rb:1637:in `each'
 +
/var/canvas/config/initializers/active_record.rb:1637:in `migrate'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/migration.rb:570:in `up'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/migration.rb:551:in `migrate'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/railties/databases.rake:193:in `block (2 levels) in <top (required)>'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:59:in `call'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:59:in `each'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:59:in `block (4 levels) in shardify_task'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/switchman/database_server.rb:93:in `unshackle'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:58:in `block (3 levels) in shardify_task'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:330:in `block (2 levels) in with_each_shard'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:61:in `activate'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:513:in `activate'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:328:in `block in with_each_shard'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/relation/delegation.rb:6:in `each'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/relation/delegation.rb:6:in `each'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:324:in `with_each_shard'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:53:in `block (2 levels) in shardify_task'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/switchman/shackles.rb:22:in `activate'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:52:in `block in shardify_task'
 +
ActiveRecord::UnknownAttributeError: unknown attribute: max_concurrent
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/attribute_assignment.rb:88:in `block in assign_attributes'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/attribute_assignment.rb:78:in `each'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/attribute_assignment.rb:78:in `assign_attributes'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/base.rb:498:in `initialize'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/aroi-0.0.3/lib/aroi/instrumentation/active_record.rb:34:in `block in initialize'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/notifications.rb:123:in `block in instrument'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/notifications.rb:123:in `instrument'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/aroi-0.0.3/lib/aroi/instrumentation/active_record.rb:33:in `initialize'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/persistence.rb:44:in `new'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/persistence.rb:44:in `create'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/canvas-jobs-0.10.3/lib/delayed/backend/base.rb:76:in `enqueue'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/canvas-jobs-0.10.3/lib/delayed/message_sending.rb:28:in `block in send_later_enqueue_args'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/database_statements.rb:21:in `call'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/database_statements.rb:21:in `block in _run_after_transaction_commit_callbacks'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/database_statements.rb:21:in `each'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/database_statements.rb:21:in `_run_after_transaction_commit_callbacks'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/rails3.rb:4:in `commit_transaction_records_with_callbacks'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/database_statements.rb:218:in `transaction'
 +
/var/canvas/config/initializers/active_record.rb:1677:in `ddl_transaction'
 +
/var/canvas/config/initializers/active_record.rb:1661:in `block in migrate'
 +
/var/canvas/config/initializers/active_record.rb:1637:in `each'
 +
/var/canvas/config/initializers/active_record.rb:1637:in `migrate'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/migration.rb:570:in `up'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/migration.rb:551:in `migrate'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/railties/databases.rake:193:in `block (2 levels) in <top (required)>'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:59:in `call'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:59:in `each'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:59:in `block (4 levels) in shardify_task'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/switchman/database_server.rb:93:in `unshackle'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:58:in `block (3 levels) in shardify_task'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:330:in `block (2 levels) in with_each_shard'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:61:in `activate'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:513:in `activate'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:328:in `block in with_each_shard'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/relation/delegation.rb:6:in `each'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/relation/delegation.rb:6:in `each'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:324:in `with_each_shard'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:53:in `block (2 levels) in shardify_task'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/switchman/shackles.rb:22:in `activate'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:52:in `block in shardify_task'
 +
Tasks: TOP => db:migrate
 +
(See full trace by running task with --trace)
 +
</pre>
 +
<pre>
 +
helpdesk@university:/var/canvas$ cd config
 +
helpdesk@university:/var/canvas/config$ ls -la
 +
total 356
 +
drwxrwxr-x  5 helpdesk  helpdesk  4096 Jan 14 23:53 .
 +
drwxrwxr-x 24 helpdesk  helpdesk  4096 Jan 15 00:10 ..
 +
-rw-rw----  1 canvasuser helpdesk  596 Aug 27 23:42 amazon_s3.yml
 +
-rw-rw-r--  1 helpdesk  helpdesk  596 Jan 14 23:53 amazon_s3.yml.example
 +
-rw-rw-r--  1 helpdesk  helpdesk 10017 Jan 14 23:53 application.rb
 +
-rw-rw-r--  1 helpdesk  helpdesk  170 Jan 14 23:53 boot.rb
 +
-rw-rw-r--  1 helpdesk  helpdesk  298 Jan 14 23:53 bounce_notifications.yml.example
 +
-rw-rw----  1 canvasuser helpdesk  840 Jan 14 23:53 brandable_css.yml
 +
-rw-rw----  1 canvasuser helpdesk    73 Jan 14 23:53 browsers.yml
 +
-rw-rw-r--  1 helpdesk  helpdesk 19496 Jan 15 00:12 build.js
 +
-rw-rw-r--  1 helpdesk  helpdesk  2681 Jan 14 23:53 build.js.erb
 +
-rw-rw----  1 canvasuser helpdesk  920 Aug 28 01:35 cache_store.yml
 +
-rw-rw-r--  1 helpdesk  helpdesk  877 Jan 14 23:53 cache_store.yml.example
 +
-rw-rw-r--  1 helpdesk  helpdesk  527 Jan 14 23:53 canvas_cdn.yml.example
 +
-rw-rw-r--  1 helpdesk  helpdesk  334 Jan 14 23:53 canvas_rails4.rb
 +
-rw-rw-r--  1 helpdesk  helpdesk  2375 Jan 14 23:53 cassandra.yml.example
 +
-rw-rw-r--  1 helpdesk  helpdesk  405 Jan 14 23:53 consul.yml.example
 +
-rw-rw-r--  1 helpdesk  helpdesk    70 Jan 14 23:53 cutycapt.yml.example
 +
-rw-rw----  1 canvasuser helpdesk  643 Aug 27 23:51 database.yml
 +
-rw-rw-r--  1 helpdesk  helpdesk  619 Jan 14 23:53 database.yml.example
 +
-rw-rw-r--  1 helpdesk  helpdesk    71 Jan 14 23:53 database.yml.travis
 +
-rw-rw----  1 canvasuser helpdesk  631 Aug 27 23:42 delayed_jobs.yml
 +
-rw-rw-r--  1 helpdesk  helpdesk  631 Jan 14 23:53 delayed_jobs.yml.example
 +
-rw-rw----  1 canvasuser helpdesk  324 Aug 28 00:10 domain.yml
 +
-rw-rw-r--  1 helpdesk  helpdesk  301 Jan 14 23:53 domain.yml.example
 +
-rw-rw-r--  1 helpdesk  helpdesk  263 Jan 14 23:53 environment.rb
 +
drwxrwxr-x  2 helpdesk  helpdesk  4096 Jan 14 23:53 environments
 +
-rw-rw----  1 canvasuser helpdesk  490 Aug 27 23:42 external_migration.yml
 +
-rw-rw-r--  1 helpdesk  helpdesk  490 Jan 14 23:53 external_migration.yml.example
 +
-rw-rw----  1 canvasuser helpdesk  357 Aug 27 23:42 file_store.yml
 +
-rw-rw-r--  1 helpdesk  helpdesk  357 Jan 14 23:53 file_store.yml.example
 +
-rw-rw----  1 canvasuser helpdesk  293 Jan 14 23:53 fontcustom.yml
 +
-rw-rw-r--  1 helpdesk  helpdesk  1927 Jan 14 23:53 incoming_mail.yml.example
 +
drwxrwxr-x  2 helpdesk  helpdesk  4096 Jan 14 23:53 initializers
 +
-rwxrwxr-x  1 helpdesk  helpdesk  6062 Jan 14 23:53 jslint.conf
 +
-rw-rw-r--  1 helpdesk  helpdesk  147 Jan 14 23:53 linked_in.yml.example
 +
drwxrwxr-x  3 helpdesk  helpdesk  4096 Jan 14 23:53 locales
 +
-rwxrwxr-x  1 helpdesk  helpdesk  501 Jan 14 23:53 logging.yml.example
 +
-rw-rw-r--  1 helpdesk  helpdesk  428 Jan 14 23:53 marginalia.yml.example
 +
-rw-rw-r--  1 helpdesk  helpdesk    75 Jan 14 23:53 memcache.yml.example
 +
-rw-rw----  1 canvasuser helpdesk  1301 Aug 27 23:54 outgoing_mail.yml
 +
-rw-rw-r--  1 helpdesk  helpdesk  1253 Jan 14 23:53 outgoing_mail.yml.example
 +
-rw-rw-r--  1 helpdesk  helpdesk  455 Jan 14 23:53 periodic_jobs.yml.example
 +
-rw-rw-r--  1 helpdesk  helpdesk    83 Jan 14 23:53 raven.yml.example
 +
-rw-rw----  1 canvasuser helpdesk  861 Aug 28 01:36 redis.yml
 +
-rw-rw-r--  1 helpdesk  helpdesk  861 Jan 14 23:53 redis.yml.example
 +
-rw-rw-r--  1 helpdesk  helpdesk 98038 Jan 14 23:53 routes.rb
 +
-rw-rw-r--  1 helpdesk  helpdesk  782 Jan 14 23:53 saml.yml.example
 +
-rw-rw----  1 canvasuser helpdesk  272 Aug 28 00:13 security.yml
 +
-rw-rw-r--  1 helpdesk  helpdesk  314 Jan 14 23:53 security.yml.example
 +
-rw-rw-r--  1 helpdesk  helpdesk  191 Jan 14 23:53 selenium.yml.example
 +
-rw-rw-r--  1 helpdesk  helpdesk  528 Jan 14 23:53 session_store.yml.example
 +
-rw-rw-r--  1 helpdesk  helpdesk    98 Jan 14 23:53 statsd.yml.example
 +
-rw-rw----  1 canvasuser helpdesk  545 Jan 14 23:53 styleguide.yml
 +
-rw-rw----  1 canvasuser helpdesk    41 Jan 14 23:53 testem.yml
 +
-rw-rw-r--  1 helpdesk  helpdesk    99 Jan 14 23:53 testrail.yml.example
 +
-rw-rw-r--  1 helpdesk  helpdesk  988 Jan 14 23:53 tours.rb
 +
-rw-rw-r--  1 helpdesk  helpdesk    89 Jan 14 23:53 twilio.yml.example
 +
-rw-rw-r--  1 helpdesk  helpdesk  176 Jan 14 23:53 twitter.yml.example
 +
helpdesk@university:/var/canvas/config$ RAILS_ENV=production bundle exec rake db:migrate --trace
 +
(in /var/canvas)
 +
^Crake aborted!
 +
Interrupt:
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `block in require'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/mail-2.5.4/lib/mail/encodings/binary.rb:2:in `<top (required)>'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `block in require'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/mail-2.5.4/lib/mail/encodings/8bit.rb:2:in `<top (required)>'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `block in require'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/mail-2.5.4/lib/mail/encodings/7bit.rb:2:in `<top (required)>'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `block in require'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/mail-2.5.4/lib/mail/encodings/base64.rb:2:in `<top (required)>'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `block in require'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/mail-2.5.4/lib/mail.rb:84:in `<module:Mail>'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/mail-2.5.4/lib/mail.rb:2:in `<top (required)>'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `block in require'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
 +
/var/canvas/gems/incoming_mail_processor/lib/incoming_mail_processor.rb:2:in `<top (required)>'
 +
/var/lib/gems/2.1.0/gems/bundler-1.7.11/lib/bundler/runtime.rb:76:in `require'
 +
/var/lib/gems/2.1.0/gems/bundler-1.7.11/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
 +
/var/lib/gems/2.1.0/gems/bundler-1.7.11/lib/bundler/runtime.rb:72:in `each'
 +
/var/lib/gems/2.1.0/gems/bundler-1.7.11/lib/bundler/runtime.rb:72:in `block in require'
 +
/var/lib/gems/2.1.0/gems/bundler-1.7.11/lib/bundler/runtime.rb:61:in `each'
 +
/var/lib/gems/2.1.0/gems/bundler-1.7.11/lib/bundler/runtime.rb:61:in `require'
 +
/var/lib/gems/2.1.0/gems/bundler-1.7.11/lib/bundler.rb:134:in `require'
 +
/var/canvas/config/application.rb:27:in `<top (required)>'
 +
/var/canvas/Rakefile:4:in `require'
 +
/var/canvas/Rakefile:4:in `<top (required)>'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/lib/rake/rake_module.rb:28:in `load'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/lib/rake/rake_module.rb:28:in `load_rakefile'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:689:in `raw_load_rakefile'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:94:in `block in load_rakefile'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:176:in `standard_exception_handling'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:93:in `load_rakefile'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:77:in `block in run'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:176:in `standard_exception_handling'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:75:in `run'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/bin/rake:33:in `<top (required)>'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/bin/rake:23:in `load'
 +
/var/canvas/vendor/bundle/ruby/2.1.0/bin/rake:23:in `<main>'
 +
helpdesk@university:/var/canvas/config$ cd ..
 +
</pre>
 +
<pre style="font-weight: bold">
 +
helpdesk@university:/var/canvas$ RAILS_ENV=production bundle exec rake db:migrate --trace</pre>
 +
<pre>
 +
** Invoke db:migrate (first_time)
 +
** Invoke environment (first_time)
 +
** Execute environment
 +
** Invoke db:load_config (first_time)
 +
** Execute db:load_config
 +
** Execute db:migrate
 +
1: production:public
 +
==  UseNewSisAppUrlAccountSetting: migrating ==================================
 +
==  UseNewSisAppUrlAccountSetting: migrated (0.0349s) =========================
 +
 
 +
==  SetDevloperKeysAccountIdNil: migrating ====================================
 +
==  SetDevloperKeysAccountIdNil: migrated (0.0372s) ===========================
 +
 
 +
==  DropUnusedColumnsFromGroups: migrating ====================================
 +
-- remove_column(:groups, :hashtag)
 +
  -> 0.0042s
 +
-- remove_column(:groups, :show_public_context_messages)
 +
  -> 0.0007s
 +
==  DropUnusedColumnsFromGroups: migrated (0.0051s) ===========================
 +
 
 +
==  UpdateToolProxySharedSecret: migrating ====================================
 +
-- change_column(:lti_tool_proxies, :shared_secret, :text)
 +
  -> 0.0019s
 +
==  UpdateToolProxySharedSecret: migrated (0.0021s) ===========================
 +
 
 +
==  AddUniqueIndexOnProvisionalGradeScorer: migrating =========================
 +
-- change_column_null(:moderated_grading_provisional_grades, :position, true)
 +
  -> 0.0011s
 +
-- remove_index(:moderated_grading_provisional_grades, {:name=>:idx_mg_provisional_grades_unique_submission_position})
 +
  -> 0.0049s
 +
-- add_index(:moderated_grading_provisional_grades, [:submission_id, :scorer_id], {:unique=>true, :name=>:idx_mg_provisional_grades_unique_submission_scorer})
 +
  -> 0.0161s
 +
==  AddUniqueIndexOnProvisionalGradeScorer: migrated (0.1157s) ================
 +
 
 +
==  RemoveProvisionalGradePosition: migrating =================================
 +
-- remove_column(:moderated_grading_provisional_grades, :position)
 +
  -> 0.0007s
 +
==  RemoveProvisionalGradePosition: migrated (0.0009s) ========================
 +
 
 +
==  GrandfatherCanvasAuthentication: migrating ================================
 +
==  GrandfatherCanvasAuthentication: migrated (3.2957s) =======================
 +
 
 +
==  AddMobileOverridesToBrandConfig: migrating ================================
 +
-- column_exists?(:brand_configs, :mobile_js_overrides)
 +
  -> 0.0014s
 +
-- add_column(:brand_configs, :mobile_js_overrides, :text)
 +
  -> 0.0010s
 +
-- column_exists?(:brand_configs, :mobile_css_overrides)
 +
  -> 0.0012s
 +
-- add_column(:brand_configs, :mobile_css_overrides, :text)
 +
  -> 0.0007s
 +
==  AddMobileOverridesToBrandConfig: migrated (0.0047s) =======================
 +
 
 +
==  DropCommentsFromRubricAssessments: migrating ==============================
 +
==  DropCommentsFromRubricAssessments: migrated (0.0000s) =====================
 +
 
 +
==  ChangeAssignmentOverrideTitle: migrating ==================================
 +
==  ChangeAssignmentOverrideTitle: migrated (0.0108s) =========================
 +
 
 +
==  CreateCanvadocsSubmissionsTable: migrating ================================
 +
-- create_table(:canvadocs_submissions)
 +
  -> 0.0097s
 +
-- add_foreign_key(:canvadocs_submissions, :submissions)
 +
  -> 0.0043s
 +
-- add_foreign_key(:canvadocs_submissions, :canvadocs)
 +
  -> 0.0059s
 +
-- add_foreign_key(:canvadocs_submissions, :crocodoc_documents)
 +
  -> 0.0037s
 +
-- add_index(:canvadocs_submissions, :canvadoc_id, {:where=>"canvadoc_id IS NOT NULL"})
 +
  -> 0.0044s
 +
-- add_index(:canvadocs_submissions, :crocodoc_document_id, {:where=>"crocodoc_document_id IS NOT NULL"})
 +
  -> 0.0036s
 +
-- add_index(:canvadocs_submissions, :submission_id)
 +
  -> 0.0041s
 +
==  CreateCanvadocsSubmissionsTable: migrated (0.0365s) =======================
 +
 
 +
==  RunCanvadocsSubmissionsFixup: migrating ===================================
 +
==  RunCanvadocsSubmissionsFixup: migrated (0.0073s) ==========================
 +
 
 +
==  AddAssignmentGradesPublishedAt: migrating =================================
 +
-- add_column(:assignments, :grades_published_at, :datetime)
 +
  -> 0.0023s
 +
==  AddAssignmentGradesPublishedAt: migrated (0.0025s) ========================
 +
 
 +
==  FixUnresolvedLinksInQuizzes: migrating ====================================
 +
==  FixUnresolvedLinksInQuizzes: migrated (0.0014s) ===========================
 +
 
 +
==  AddIncompleteRequirementsToProgressions: migrating ========================
 +
-- add_column(:context_module_progressions, :incomplete_requirements, :text)
 +
  -> 0.0196s
 +
==  AddIncompleteRequirementsToProgressions: migrated (0.0197s) ===============
 +
 
 +
==  ReevaluateIncompleteProgressions: migrating ===============================
 +
==  ReevaluateIncompleteProgressions: migrated (0.0495s) ======================
 +
 
 +
==  AddTransientBounceColumnsToCommunicationChannels: migrating ===============
 +
-- add_column(:communication_channels, :last_transient_bounce_at, :datetime)
 +
  -> 0.0017s
 +
-- add_column(:communication_channels, :last_transient_bounce_details, :text, {:length=>32768})
 +
  -> 0.0006s
 +
==  AddTransientBounceColumnsToCommunicationChannels: migrated (0.0025s) ======
 +
 
 +
==  AddRefreshTokenToAccessTokens: migrating ==================================
 +
-- add_column(:access_tokens, :crypted_refresh_token, :string)
 +
  -> 0.0009s
 +
-- add_index(:access_tokens, [:crypted_refresh_token], {:unique=>true})
 +
  -> 0.0055s
 +
==  AddRefreshTokenToAccessTokens: migrated (0.0066s) =========================
 +
 
 +
==  CreateSelectionTable: migrating ===========================================
 +
-- create_table(:moderated_grading_selections)
 +
  -> 0.0074s
 +
-- add_index(:moderated_grading_selections, :assignment_id)
 +
  -> 0.0030s
 +
-- add_index(:moderated_grading_selections, [:assignment_id, :student_id], {:unique=>true, :name=>:idx_mg_selections_unique_on_assignment_and_student})
 +
  -> 0.0034s
 +
-- add_foreign_key(:moderated_grading_selections, :assignments)
 +
  -> 0.0049s
 +
-- add_foreign_key(:moderated_grading_selections, :users, {:column=>:student_id})
 +
  -> 0.0032s
 +
-- add_foreign_key(:moderated_grading_selections, :moderated_grading_provisional_grades, {:column=>:selected_provisional_grade_id})
 +
  -> 0.0030s
 +
==  CreateSelectionTable: migrated (0.0254s) ==================================
 +
 
 +
==  AddCommentsToCalendarEvents: migrating ====================================
 +
-- add_column(:calendar_events, :comments, :text)
 +
  -> 0.0015s
 +
==  AddCommentsToCalendarEvents: migrated (0.0016s) ===========================
 +
 
 +
==  AddFinalToProvisionalGrades: migrating ====================================
 +
-- add_column(:moderated_grading_provisional_grades, :final, :boolean, {:null=>false, :default=>false})
 +
  -> 0.0070s
 +
-- add_index(:moderated_grading_provisional_grades, [:submission_id], {:unique=>true, :where=>["final = ?", true], :name=>:idx_mg_provisional_grades_unique_submission_when_final})
 +
  -> 3.4874s
 +
-- remove_index(:moderated_grading_provisional_grades, {:name=>:idx_mg_provisional_grades_unique_submission_scorer})
 +
  -> 0.0034s
 +
-- add_index(:moderated_grading_provisional_grades, [:submission_id, :scorer_id], {:unique=>true, :name=>:idx_mg_provisional_grades_unique_sub_scorer_when_not_final, :where=>["final = ?", false]})
 +
  -> 0.0061s
 +
==  AddFinalToProvisionalGrades: migrated (3.5045s) ===========================
 +
 
 +
==  AddJitProvisioningToAuthenticationProviders: migrating ====================
 +
-- add_column(:account_authorization_configs, :jit_provisioning, :bool, {:default=>false, :null=>false})
 +
  -> 0.0157s
 +
==  AddJitProvisioningToAuthenticationProviders: migrated (0.0158s) ===========
 +
 
 +
==  GrandfatherSelfRegistration: migrating ====================================
 +
==  GrandfatherSelfRegistration: migrated (0.0117s) ===========================
 +
 
 +
==  AddGradedAnonymouslyToSubmissions: migrating ==============================
 +
-- add_column(:submissions, :graded_anonymously, :boolean)
 +
  -> 0.0009s
 +
==  AddGradedAnonymouslyToSubmissions: migrated (0.0011s) =====================
 +
 
 +
==  FixImportedQuestionMediaComments: migrating ===============================
 +
==  FixImportedQuestionMediaComments: migrated (0.0026s) ======================
 +
 
 +
==  ChangeAuthFilterToText: migrating =========================================
 +
-- change_column(:account_authorization_configs, :auth_filter, :text)
 +
  -> 0.0019s
 +
==  ChangeAuthFilterToText: migrated (0.0021s) ================================
 +
 
 +
==  ExpandExternalFeedUrlColumns: migrating ===================================
 +
-- change_column(:external_feed_entries, :url, :text)
 +
  -> 0.0051s
 +
-- change_column(:external_feed_entries, :source_url, :text)
 +
  -> 0.0005s
 +
-- change_column(:external_feed_entries, :author_url, :text)
 +
  -> 0.0005s
 +
==  ExpandExternalFeedUrlColumns: migrated (0.0064s) ==========================
 +
 
 +
==  AddTimestampsToGroupCategories: migrating =================================
 +
-- change_table(:group_categories)
 +
  -> 0.0021s
 +
==  AddTimestampsToGroupCategories: migrated (0.0022s) ========================
 +
 
 +
==  LengthenUserServicesToken: migrating ======================================
 +
-- change_column(:user_services, :token, :text)
 +
  -> 0.0032s
 +
==  LengthenUserServicesToken: migrated (0.0033s) =============================
 +
 
 +
==  AddAutoExpireTokensToDeveloperKey: migrating ==============================
 +
-- add_column(:developer_keys, :auto_expire_tokens, :boolean)
 +
  -> 0.0009s
 +
==  AddAutoExpireTokensToDeveloperKey: migrated (0.0011s) =====================
 +
 
 +
==  AddSourceProvisionalGradeIdToProvisionalGrades: migrating =================
 +
-- add_column(:moderated_grading_provisional_grades, :source_provisional_grade_id, :integer, {:limit=>8})
 +
  -> 0.0007s
 +
-- add_foreign_key(:moderated_grading_provisional_grades, :moderated_grading_provisional_grades, {:column=>:source_provisional_grade_id, :name=>"provisional_grades_source_provisional_grade_fk"})
 +
  -> 0.0050s
 +
==  AddSourceProvisionalGradeIdToProvisionalGrades: migrated (0.0061s) ========
 +
 
 +
==  AddUniqueIndexToTurnitinColumns: migrating ================================
 +
-- add_index(:assignments, :turnitin_id, {:unique=>true, :algorithm=>:concurrently, :where=>"turnitin_id IS NOT NULL"})
 +
  -> 0.0082s
 +
-- add_index(:users, :turnitin_id, {:unique=>true, :algorithm=>:concurrently, :where=>"turnitin_id IS NOT NULL"})
 +
  -> 0.0406s
 +
==  AddUniqueIndexToTurnitinColumns: migrated (0.0492s) =======================
 +
 
 +
==  SetSearchPathsOnFunctions: migrating ======================================
 +
-- execute("ALTER FUNCTION \"delayed_jobs_after_delete_row_tr_fn\"() SET search_path TO public")
 +
  -> 0.0007s
 +
-- execute("ALTER FUNCTION \"delayed_jobs_before_insert_row_tr_fn\"() SET search_path TO public")
 +
  -> 0.0004s
 +
-- execute("ALTER FUNCTION \"half_md5_as_bigint\"(varchar) SET search_path TO public")
 +
  -> 0.0026s
 +
==  SetSearchPathsOnFunctions: migrated (0.0041s) =============================
 +
 
 +
==  AddUpdatePayloadToLtiToolProxy: migrating =================================
 +
-- add_column(:lti_tool_proxies, :update_payload, :text)
 +
  -> 0.0008s
 +
==  AddUpdatePayloadToLtiToolProxy: migrated (0.0009s) ========================
 +
 
 +
==  AddExpiresAtToJobs: migrating =============================================
 +
-- add_column(:delayed_jobs, :expires_at, :datetime)
 +
  -> 0.0016s
 +
-- add_column(:failed_jobs, :expires_at, :datetime)
 +
  -> 0.0008s
 +
==  AddExpiresAtToJobs: migrated (0.0026s) ====================================
 +
 
 +
==  CreateMinimalistTheme: migrating ==========================================
 +
==  CreateMinimalistTheme: migrated (0.0300s) =================================
 +
 
 +
==  AddPermissionsForModeratedGrading: migrating ==============================
 +
==  AddPermissionsForModeratedGrading: migrated (0.0019s) =====================
 +
 
 +
==  CreateStateTheme: migrating ===============================================
 +
==  CreateStateTheme: migrated (0.0082s) ======================================
 +
 
 +
==  FixDeprecatedPolymorphicNames: migrating ==================================
 +
==  FixDeprecatedPolymorphicNames: migrated (0.2779s) =========================
 +
 
 +
==  ImproveMaxConcurrent: migrating ===========================================
 +
-- execute("      CREATE OR REPLACE FUNCTION \"delayed_jobs_after_delete_row_tr_fn\" () RETURNS trigger AS $$\n      DECLARE\n        running_count integer;\n      BEGIN\n        IF OLD.strand IS NOT NULL THEN\n          PERFORM pg_advisory_xact_lock(half_md5_as_bigint(OLD.strand));\n          running_count := (SELECT COUNT(*) FROM delayed_jobs WHERE strand = OLD.strand AND next_in_strand = 't');\n          IF running_count < OLD.max_concurrent THEN\n            UPDATE delayed_jobs SET next_in_strand = 't' WHERE id = (\n              SELECT id FROM delayed_jobs j2 WHERE next_in_strand = 'f' AND\n              j2.strand = OLD.strand ORDER BY j2.id ASC LIMIT (OLD.max_concurrent - running_count) FOR UPDATE\n            );\n          END IF;\n        END IF;\n        RETURN OLD;\n      END;\n      $$ LANGUAGE plpgsql SET search_path TO public;\n")
 +
  -> 0.0035s
 +
==  ImproveMaxConcurrent: migrated (0.0037s) ==================================
 +
 
 +
==  AddFolderAndPositionIndexToAttachments: migrating =========================
 +
-- add_index(:attachments, [:folder_id, :position], {:algorithm=>:concurrently, :where=>"folder_id IS NOT NULL"})
 +
  -> 0.0143s
 +
==  AddFolderAndPositionIndexToAttachments: migrated (0.0144s) ================
 +
 
 +
==  FixFolderNames: migrating =================================================
 +
==  FixFolderNames: migrated (0.0022s) ========================================
 +
 
 +
** Invoke db:_dump (first_time)
 +
** Execute db:_dump
 +
</pre>
 +
|}
 +
 
 +
==Notification types==
 +
With the permissions set:
 +
<nowiki>~/var/canvas$ RAILS_ENV=production bundle exec rake db:load_notifications</nowiki>
 +
 
 +
==Reset Permissions==
 +
<nowiki>/var/canavs$ sudo chown canvasuser:helpdesk ./config/*.yml
 +
/var/canvas$ sudo chown canvasuser:root ./config/cache_store.yml
 +
/var/canvas$ sudo chown canvasuser:root ./config/redis.yml
 +
/var/canvas$ sudo chmod 400 ./config/*.yml
 +
/var/canvas$ sudo chown canvasuser ./config.ru</nowiki>
 +
 
 +
==Restart Services==
 +
<nowiki>~/var/canvas$ sudo service postgresql restart
 +
~/var/canvas$ sudo service apache2 restart </nowiki>
 +
 
 +
==Troubleshooting==
 +
During my install, once I was done, I got the following message:
 +
<nowiki>Permission denied @ rb_sysopen - /var/canvas/config/cache_store.yml (Errno::EACCES)</nowiki>
 +
It appears that the update reset the file permission for /var/canvas/config.ru back to the installation user I was running as, rather than the user canvas runs as.  As such, I had to run:
 +
<nowiki>~/var/canvas$ sudo chown canvasuser ./config.ru</nowiki>
 +
 
 +
====Upgrading and installing bundles====
 
If you get the same error as I did:
 
If you get the same error as I did:
 
  <nowiki>/var/canvas$ bundle install
 
  <nowiki>/var/canvas$ bundle install
Line 42: Line 665:
 
It was installed into ./vendor/bundle</nowiki>
 
It was installed into ./vendor/bundle</nowiki>
  
==Upgrade and Install Node Modules==
+
====Complied Assets====
<nowiki>~/var/canvas$ npm install</nowiki>
+
==Set Permissions==
+
You'll need to temporarily change permissions to allow the update (my user that performs updates is helpdesk):
+
<nowiki>/var/canvas$ sudo chmod 660 ./config/*.yml
+
/var/canvas$ sudo chown canvasuser:helpdesk ./config/*.yml</nowiki>
+
==Complied Assets==
+
With the permissions set:
+
<nowiki>~/var/canvas$ RAILS_ENV=production bundle exec rake canvas:compile_assets</nowiki>
+
====Reason:====
+
 
If you get an error:
 
If you get an error:
 
  <nowiki>rake aborted!
 
  <nowiki>rake aborted!
Line 61: Line 675:
 
  <nowiki>/var/canvas$ sudo chmod 400 ./config/domain.yml</nowiki>
 
  <nowiki>/var/canvas$ sudo chmod 400 ./config/domain.yml</nowiki>
  
==Database Migrations==
+
====Database migrations====
With the permissions set:
+
<nowiki>~/var/canvas$ RAILS_ENV=production bundle exec rake db:migrate</nowiki>
+
For some odd reason I still got an unspecified error, even with the permissions set.  I ran it a second time with --trace so I could see a more verbose error output and it completed successfully?
+
{| class="mw-collapsible mw-collapsed wikitable" width="90%"
+
!Error
+
|-
+
|<nowiki>helpdesk@university:/var/canvas$ RAILS_ENV=production bundle exec rake db:migrate
+
1: production:public
+
==  AddWorkflowStateToDeveloperKeys: migrating ================================
+
</nowiki>
+
|}
+
 
+
====Reason:====
+
 
If you get an error:
 
If you get an error:
 
  <nowiki>rake aborted!
 
  <nowiki>rake aborted!
Line 94: Line 695:
 
/var/canvas$ sudo chmod 400 ./config/*.yml</nowiki>
 
/var/canvas$ sudo chmod 400 ./config/*.yml</nowiki>
  
==Notification types==
+
====Notification types====
<nowiki>~/var/canvas$ RAILS_ENV=production bundle exec rake db:load_notifications</nowiki>
+
 
If you get an error:
 
If you get an error:
 
  <nowiki>rake aborted!
 
  <nowiki>rake aborted!
Line 108: Line 708:
 
sudo chown canvasuser:root ./config/redis.yml
 
sudo chown canvasuser:root ./config/redis.yml
 
/var/canvas$ sudo chmod 400 ./config/*.yml</nowiki>
 
/var/canvas$ sudo chmod 400 ./config/*.yml</nowiki>
 
==Restart Services==
 
<nowiki>~/var/canvas$ sudo service postgresql restart
 
~/var/canvas$ sudo service apache2 restart </nowiki>
 
 
==Troubleshooting==
 
During my install, once I was done, I got the following message:
 
<nowiki>Permission denied @ rb_sysopen - /var/canvas/config/cache_store.yml (Errno::EACCES)</nowiki>
 
It appears that the update restart the file permission for /var/canvas/config.ru back to the installation user I was running as, rather than the user canvas runs as.  As such, I had to run:
 
<nowiki>~/var/canvas$ sudo chown canvasuser ./config.ru</nowiki>
 

Latest revision as of 13:15, 22 January 2016

Contents

[edit] Instruction source

All instructions are from the Canvas LMS Github wiki

[edit] Requirements

These upgrade instructions make the following assumptions:

  1. you installed canvas lms via git
  2. redis is running at a version greater than 2.6
  3. you are logged in as the original user who installed canvas and ran the git and gem installs
  4. you've created a backup or snapshot before continuing
  5. there are no local changes you've made to the canvas code that are different than the stable version on github

[edit] Upgrade Source

Start by logging in as the original user that installed Canvas. This is very important as you'll encounter permission issues with git.

~/var/canvas$ sudo su helpdesk
~/var/canvas$ git fetch && git reset --hard origin/stable
...
HEAD is now at da056ac treesame commit of origin/stable/2016-01-09

[edit] Upgrade and Install Bundled Gems

~/var/canvas$ bundle update addressable
~/var/canvas$ bundle install

[edit] Upgrade and Install Node Modules

~/var/canvas$ npm install

[edit] Set Permissions

You'll need to temporarily change permissions to allow the update (my user that performs updates is helpdesk):

/var/canvas$ sudo chmod 660 ./config/*.yml
/var/canvas$ sudo chown canvasuser:helpdesk ./config/*.yml

[edit] Complied Assets

With the permissions set:

~/var/canvas$ RAILS_ENV=production bundle exec rake canvas:compile_assets

[edit] Database Migrations

With the permissions set:

~/var/canvas$ RAILS_ENV=production bundle exec rake db:migrate

For some odd reason I still got an unspecified error, even with the permissions set. I ran it a second time with --trace so I could see a more verbose error output and it completed successfully?

Error
helpdesk@university:/var/canvas$ RAILS_ENV=production bundle exec rake db:migrate
1: production:public
==  AddWorkflowStateToDeveloperKeys: migrating ================================
-- add_column(:developer_keys, :workflow_state, :string, {:null=>false, :default=>"active"})
   -> 0.1300s
==  AddWorkflowStateToDeveloperKeys: migrated (0.1303s) =======================

==  DisallowNullDeveloperKey: migrating =======================================
-- change_column_null(:access_tokens, :developer_key_id, false)
   -> 0.0018s
==  DisallowNullDeveloperKey: migrated (3.7544s) ==============================

==  NeedsMoreTurnitinId: migrating ============================================
-- add_column(:assignments, :turnitin_id, :integer, {:limit=>8})
   -> 0.0024s
-- add_column(:users, :turnitin_id, :integer, {:limit=>8})
   -> 0.0018s
==  NeedsMoreTurnitinId: migrated (0.0045s) ===================================

==  CreateLearningOutcomeQuestionResults: migrating ===========================
-- create_table(:learning_outcome_question_results)
   -> 0.0176s
-- add_index("learning_outcome_question_results", [:learning_outcome_id], {:name=>"index_learning_outcome_question_results_on_learning_outcome_id"})
   -> 0.0057s
-- add_index("learning_outcome_question_results", [:learning_outcome_result_id], {:name=>"index_LOQR_on_learning_outcome_result_id"})
   -> 0.0037s
==  CreateLearningOutcomeQuestionResults: migrated (0.0274s) ==================

==  AddParentMd5ToBrandConfigs: migrating =====================================
-- add_column(:brand_configs, :parent_md5, :string)
   -> 0.0016s
==  AddParentMd5ToBrandConfigs: migrated (0.0017s) ============================

==  AddLtiMessageHandlerIdToLtiResourcePlacements: migrating ==================
-- add_column(:lti_resource_placements, :message_handler_id, :bigint)
   -> 0.0023s
-- add_foreign_key(:lti_resource_placements, :lti_message_handlers, {:column=>:message_handler_id})
   -> 0.0146s
-- add_index(:lti_resource_placements, [:placement, :message_handler_id], {:unique=>true, :where=>"message_handler_id IS NOT NULL", :name=>"index_resource_placements_on_placement_and_message_handler"})
   -> 0.0059s
==  AddLtiMessageHandlerIdToLtiResourcePlacements: migrated (0.0234s) =========

==  CreateEpubExports: migrating ==============================================
-- create_table(:epub_exports)
   -> 0.0096s
-- add_foreign_key_if_not_exists(:epub_exports, :users, {:delay_validation=>true})
   -> 0.0068s
-- add_foreign_key_if_not_exists(:epub_exports, :courses, {:delay_validation=>true})
   -> 0.0315s
-- add_foreign_key_if_not_exists(:epub_exports, :content_exports, {:delay_validation=>true})
   -> 0.0088s
-- add_index(:epub_exports, :user_id)
   -> 0.0042s
-- add_index(:epub_exports, :course_id)
   -> 0.0038s
-- add_index(:epub_exports, :content_export_id)
   -> 0.0053s
==  CreateEpubExports: migrated (0.0710s) =====================================

==  AddLtiMessageHandlerIdToLtiResourcePlacementsDataFromResourceHandler: migrating 
==  AddLtiMessageHandlerIdToLtiResourcePlacementsDataFromResourceHandler: migrated (0.0354s) 

==  AddAssignmentModeratedGrading: migrating ==================================
-- add_column(:assignments, :moderated_grading, :boolean)
   -> 0.0010s
==  AddAssignmentModeratedGrading: migrated (0.0013s) =========================

==  CreateModeratedGradingProvisionalGrades: migrating ========================
-- create_table(:moderated_grading_provisional_grades)
   -> 0.0354s
-- add_index(:moderated_grading_provisional_grades, :submission_id)
   -> 0.0107s
-- add_index(:moderated_grading_provisional_grades, [:submission_id, :position], {:unique=>true, :name=>:idx_mg_provisional_grades_unique_submission_position})
   -> 0.0034s
-- add_foreign_key(:moderated_grading_provisional_grades, :submissions)
   -> 0.0057s
-- add_foreign_key(:moderated_grading_provisional_grades, :users, {:column=>:scorer_id})
   -> 0.0020s
==  CreateModeratedGradingProvisionalGrades: migrated (0.0579s) ===============

==  AddHasAnnotationsToCanvadocs: migrating ===================================
-- add_column(:canvadocs, :has_annotations, :bool)
   -> 0.0019s
==  AddHasAnnotationsToCanvadocs: migrated (0.0021s) ==========================

==  AddProvisionalGradeIdToSubmissionComments: migrating ======================
-- add_column(:submission_comments, :provisional_grade_id, :integer, {:limit=>8})
   -> 0.0012s
-- add_foreign_key(:submission_comments, :moderated_grading_provisional_grades, {:column=>:provisional_grade_id})
   -> 0.0067s
==  AddProvisionalGradeIdToSubmissionComments: migrated (0.0083s) =============

==  AddMaxConcurrentToJobs: migrating =========================================
-- add_column(:delayed_jobs, :max_concurrent, :integer, {:default=>1, :null=>false})
   -> 0.0881s
-- execute("      CREATE OR REPLACE FUNCTION \"delayed_jobs_before_insert_row_tr_fn\" () RETURNS trigger AS $$\n      BEGIN\n        IF NEW.strand IS NOT NULL THEN\n          PERFORM pg_advisory_xact_lock(half_md5_as_bigint(NEW.strand));\n          IF (SELECT COUNT(*) FROM delayed_jobs WHERE strand = NEW.strand) >= NEW.max_concurrent THEN\n            NEW.next_in_strand := 'f';\n          END IF;\n        END IF;\n        RETURN NEW;\n      END;\n      $$ LANGUAGE plpgsql SET search_path TO public;\n")
   -> 0.0265s
-- execute("      CREATE OR REPLACE FUNCTION \"delayed_jobs_after_delete_row_tr_fn\" () RETURNS trigger AS $$\n      BEGIN\n        IF OLD.strand IS NOT NULL THEN\n          PERFORM pg_advisory_xact_lock(half_md5_as_bigint(OLD.strand));\n          IF (SELECT COUNT(*) FROM delayed_jobs WHERE strand = OLD.strand AND next_in_strand = 't') < OLD.max_concurrent THEN\n            UPDATE delayed_jobs SET next_in_strand = 't' WHERE id = (\n              SELECT id FROM delayed_jobs j2 WHERE next_in_strand = 'f' AND\n              j2.strand = OLD.strand ORDER BY j2.id ASC LIMIT 1 FOR UPDATE\n            );\n          END IF;\n        END IF;\n        RETURN OLD;\n      END;\n      $$ LANGUAGE plpgsql SET search_path TO public;\n")
   -> 0.0012s
==  AddMaxConcurrentToJobs: migrated (0.1166s) ================================

==  DropLtiResourceHandlerFromLtiResourcePlacement: migrating =================
-- remove_column(:lti_resource_placements, :resource_handler_id)
   -> 0.0081s
==  DropLtiResourceHandlerFromLtiResourcePlacement: migrated (0.0082s) ========

==  AddNotificationCategoryToStreamItems: migrating ===========================
-- add_column(:stream_items, :notification_category, :string)
   -> 0.0012s
-- add_index(:stream_items, :notification_category, {:algorithm=>:concurrently})
   -> 0.0149s
==  AddNotificationCategoryToStreamItems: migrated (0.0164s) ==================

==  PopulateStreamItemNotificationCategory: migrating =========================
==  PopulateStreamItemNotificationCategory: migrated (0.0015s) ================
NOTICE:  there is no transaction in progress
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

unknown attribute: max_concurrent/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/attribute_assignment.rb:88:in `block in assign_attributes'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/attribute_assignment.rb:78:in `each'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/attribute_assignment.rb:78:in `assign_attributes'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/base.rb:498:in `initialize'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/aroi-0.0.3/lib/aroi/instrumentation/active_record.rb:34:in `block in initialize'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/notifications.rb:123:in `block in instrument'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/notifications.rb:123:in `instrument'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/aroi-0.0.3/lib/aroi/instrumentation/active_record.rb:33:in `initialize'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/persistence.rb:44:in `new'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/persistence.rb:44:in `create'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/canvas-jobs-0.10.3/lib/delayed/backend/base.rb:76:in `enqueue'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/canvas-jobs-0.10.3/lib/delayed/message_sending.rb:28:in `block in send_later_enqueue_args'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/database_statements.rb:21:in `call'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/database_statements.rb:21:in `block in _run_after_transaction_commit_callbacks'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/database_statements.rb:21:in `each'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/database_statements.rb:21:in `_run_after_transaction_commit_callbacks'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/rails3.rb:4:in `commit_transaction_records_with_callbacks'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/database_statements.rb:218:in `transaction'
/var/canvas/config/initializers/active_record.rb:1677:in `ddl_transaction'
/var/canvas/config/initializers/active_record.rb:1661:in `block in migrate'
/var/canvas/config/initializers/active_record.rb:1637:in `each'
/var/canvas/config/initializers/active_record.rb:1637:in `migrate'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/migration.rb:570:in `up'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/migration.rb:551:in `migrate'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/railties/databases.rake:193:in `block (2 levels) in <top (required)>'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:59:in `call'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:59:in `each'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:59:in `block (4 levels) in shardify_task'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/switchman/database_server.rb:93:in `unshackle'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:58:in `block (3 levels) in shardify_task'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:330:in `block (2 levels) in with_each_shard'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:61:in `activate'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:513:in `activate'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:328:in `block in with_each_shard'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/relation/delegation.rb:6:in `each'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/relation/delegation.rb:6:in `each'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:324:in `with_each_shard'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:53:in `block (2 levels) in shardify_task'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/switchman/shackles.rb:22:in `activate'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:52:in `block in shardify_task'
ActiveRecord::UnknownAttributeError: unknown attribute: max_concurrent
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/attribute_assignment.rb:88:in `block in assign_attributes'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/attribute_assignment.rb:78:in `each'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/attribute_assignment.rb:78:in `assign_attributes'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/base.rb:498:in `initialize'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/aroi-0.0.3/lib/aroi/instrumentation/active_record.rb:34:in `block in initialize'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/notifications.rb:123:in `block in instrument'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/notifications.rb:123:in `instrument'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/aroi-0.0.3/lib/aroi/instrumentation/active_record.rb:33:in `initialize'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/persistence.rb:44:in `new'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/persistence.rb:44:in `create'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/canvas-jobs-0.10.3/lib/delayed/backend/base.rb:76:in `enqueue'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/canvas-jobs-0.10.3/lib/delayed/message_sending.rb:28:in `block in send_later_enqueue_args'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/database_statements.rb:21:in `call'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/database_statements.rb:21:in `block in _run_after_transaction_commit_callbacks'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/database_statements.rb:21:in `each'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/database_statements.rb:21:in `_run_after_transaction_commit_callbacks'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/after_transaction_commit-1.0.1/lib/after_transaction_commit/rails3.rb:4:in `commit_transaction_records_with_callbacks'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/connection_adapters/abstract/database_statements.rb:218:in `transaction'
/var/canvas/config/initializers/active_record.rb:1677:in `ddl_transaction'
/var/canvas/config/initializers/active_record.rb:1661:in `block in migrate'
/var/canvas/config/initializers/active_record.rb:1637:in `each'
/var/canvas/config/initializers/active_record.rb:1637:in `migrate'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/migration.rb:570:in `up'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/migration.rb:551:in `migrate'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/railties/databases.rake:193:in `block (2 levels) in <top (required)>'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:59:in `call'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:59:in `each'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:59:in `block (4 levels) in shardify_task'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/switchman/database_server.rb:93:in `unshackle'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:58:in `block (3 levels) in shardify_task'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:330:in `block (2 levels) in with_each_shard'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:61:in `activate'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:513:in `activate'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:328:in `block in with_each_shard'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/relation/delegation.rb:6:in `each'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activerecord-3.2.22/lib/active_record/relation/delegation.rb:6:in `each'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/app/models/switchman/shard.rb:324:in `with_each_shard'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:53:in `block (2 levels) in shardify_task'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/switchman/shackles.rb:22:in `activate'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/switchman-1.3.13/lib/tasks/switchman.rake:52:in `block in shardify_task'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
helpdesk@university:/var/canvas$ cd config
helpdesk@university:/var/canvas/config$ ls -la
total 356
drwxrwxr-x  5 helpdesk   helpdesk  4096 Jan 14 23:53 .
drwxrwxr-x 24 helpdesk   helpdesk  4096 Jan 15 00:10 ..
-rw-rw----  1 canvasuser helpdesk   596 Aug 27 23:42 amazon_s3.yml
-rw-rw-r--  1 helpdesk   helpdesk   596 Jan 14 23:53 amazon_s3.yml.example
-rw-rw-r--  1 helpdesk   helpdesk 10017 Jan 14 23:53 application.rb
-rw-rw-r--  1 helpdesk   helpdesk   170 Jan 14 23:53 boot.rb
-rw-rw-r--  1 helpdesk   helpdesk   298 Jan 14 23:53 bounce_notifications.yml.example
-rw-rw----  1 canvasuser helpdesk   840 Jan 14 23:53 brandable_css.yml
-rw-rw----  1 canvasuser helpdesk    73 Jan 14 23:53 browsers.yml
-rw-rw-r--  1 helpdesk   helpdesk 19496 Jan 15 00:12 build.js
-rw-rw-r--  1 helpdesk   helpdesk  2681 Jan 14 23:53 build.js.erb
-rw-rw----  1 canvasuser helpdesk   920 Aug 28 01:35 cache_store.yml
-rw-rw-r--  1 helpdesk   helpdesk   877 Jan 14 23:53 cache_store.yml.example
-rw-rw-r--  1 helpdesk   helpdesk   527 Jan 14 23:53 canvas_cdn.yml.example
-rw-rw-r--  1 helpdesk   helpdesk   334 Jan 14 23:53 canvas_rails4.rb
-rw-rw-r--  1 helpdesk   helpdesk  2375 Jan 14 23:53 cassandra.yml.example
-rw-rw-r--  1 helpdesk   helpdesk   405 Jan 14 23:53 consul.yml.example
-rw-rw-r--  1 helpdesk   helpdesk    70 Jan 14 23:53 cutycapt.yml.example
-rw-rw----  1 canvasuser helpdesk   643 Aug 27 23:51 database.yml
-rw-rw-r--  1 helpdesk   helpdesk   619 Jan 14 23:53 database.yml.example
-rw-rw-r--  1 helpdesk   helpdesk    71 Jan 14 23:53 database.yml.travis
-rw-rw----  1 canvasuser helpdesk   631 Aug 27 23:42 delayed_jobs.yml
-rw-rw-r--  1 helpdesk   helpdesk   631 Jan 14 23:53 delayed_jobs.yml.example
-rw-rw----  1 canvasuser helpdesk   324 Aug 28 00:10 domain.yml
-rw-rw-r--  1 helpdesk   helpdesk   301 Jan 14 23:53 domain.yml.example
-rw-rw-r--  1 helpdesk   helpdesk   263 Jan 14 23:53 environment.rb
drwxrwxr-x  2 helpdesk   helpdesk  4096 Jan 14 23:53 environments
-rw-rw----  1 canvasuser helpdesk   490 Aug 27 23:42 external_migration.yml
-rw-rw-r--  1 helpdesk   helpdesk   490 Jan 14 23:53 external_migration.yml.example
-rw-rw----  1 canvasuser helpdesk   357 Aug 27 23:42 file_store.yml
-rw-rw-r--  1 helpdesk   helpdesk   357 Jan 14 23:53 file_store.yml.example
-rw-rw----  1 canvasuser helpdesk   293 Jan 14 23:53 fontcustom.yml
-rw-rw-r--  1 helpdesk   helpdesk  1927 Jan 14 23:53 incoming_mail.yml.example
drwxrwxr-x  2 helpdesk   helpdesk  4096 Jan 14 23:53 initializers
-rwxrwxr-x  1 helpdesk   helpdesk  6062 Jan 14 23:53 jslint.conf
-rw-rw-r--  1 helpdesk   helpdesk   147 Jan 14 23:53 linked_in.yml.example
drwxrwxr-x  3 helpdesk   helpdesk  4096 Jan 14 23:53 locales
-rwxrwxr-x  1 helpdesk   helpdesk   501 Jan 14 23:53 logging.yml.example
-rw-rw-r--  1 helpdesk   helpdesk   428 Jan 14 23:53 marginalia.yml.example
-rw-rw-r--  1 helpdesk   helpdesk    75 Jan 14 23:53 memcache.yml.example
-rw-rw----  1 canvasuser helpdesk  1301 Aug 27 23:54 outgoing_mail.yml
-rw-rw-r--  1 helpdesk   helpdesk  1253 Jan 14 23:53 outgoing_mail.yml.example
-rw-rw-r--  1 helpdesk   helpdesk   455 Jan 14 23:53 periodic_jobs.yml.example
-rw-rw-r--  1 helpdesk   helpdesk    83 Jan 14 23:53 raven.yml.example
-rw-rw----  1 canvasuser helpdesk   861 Aug 28 01:36 redis.yml
-rw-rw-r--  1 helpdesk   helpdesk   861 Jan 14 23:53 redis.yml.example
-rw-rw-r--  1 helpdesk   helpdesk 98038 Jan 14 23:53 routes.rb
-rw-rw-r--  1 helpdesk   helpdesk   782 Jan 14 23:53 saml.yml.example
-rw-rw----  1 canvasuser helpdesk   272 Aug 28 00:13 security.yml
-rw-rw-r--  1 helpdesk   helpdesk   314 Jan 14 23:53 security.yml.example
-rw-rw-r--  1 helpdesk   helpdesk   191 Jan 14 23:53 selenium.yml.example
-rw-rw-r--  1 helpdesk   helpdesk   528 Jan 14 23:53 session_store.yml.example
-rw-rw-r--  1 helpdesk   helpdesk    98 Jan 14 23:53 statsd.yml.example
-rw-rw----  1 canvasuser helpdesk   545 Jan 14 23:53 styleguide.yml
-rw-rw----  1 canvasuser helpdesk    41 Jan 14 23:53 testem.yml
-rw-rw-r--  1 helpdesk   helpdesk    99 Jan 14 23:53 testrail.yml.example
-rw-rw-r--  1 helpdesk   helpdesk   988 Jan 14 23:53 tours.rb
-rw-rw-r--  1 helpdesk   helpdesk    89 Jan 14 23:53 twilio.yml.example
-rw-rw-r--  1 helpdesk   helpdesk   176 Jan 14 23:53 twitter.yml.example
helpdesk@university:/var/canvas/config$ RAILS_ENV=production bundle exec rake db:migrate --trace
(in /var/canvas)
^Crake aborted!
Interrupt: 
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `block in require'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/mail-2.5.4/lib/mail/encodings/binary.rb:2:in `<top (required)>'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `block in require'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/mail-2.5.4/lib/mail/encodings/8bit.rb:2:in `<top (required)>'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `block in require'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/mail-2.5.4/lib/mail/encodings/7bit.rb:2:in `<top (required)>'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `block in require'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/mail-2.5.4/lib/mail/encodings/base64.rb:2:in `<top (required)>'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `block in require'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/mail-2.5.4/lib/mail.rb:84:in `<module:Mail>'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/mail-2.5.4/lib/mail.rb:2:in `<top (required)>'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `block in require'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:236:in `load_dependency'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.22/lib/active_support/dependencies.rb:251:in `require'
/var/canvas/gems/incoming_mail_processor/lib/incoming_mail_processor.rb:2:in `<top (required)>'
/var/lib/gems/2.1.0/gems/bundler-1.7.11/lib/bundler/runtime.rb:76:in `require'
/var/lib/gems/2.1.0/gems/bundler-1.7.11/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
/var/lib/gems/2.1.0/gems/bundler-1.7.11/lib/bundler/runtime.rb:72:in `each'
/var/lib/gems/2.1.0/gems/bundler-1.7.11/lib/bundler/runtime.rb:72:in `block in require'
/var/lib/gems/2.1.0/gems/bundler-1.7.11/lib/bundler/runtime.rb:61:in `each'
/var/lib/gems/2.1.0/gems/bundler-1.7.11/lib/bundler/runtime.rb:61:in `require'
/var/lib/gems/2.1.0/gems/bundler-1.7.11/lib/bundler.rb:134:in `require'
/var/canvas/config/application.rb:27:in `<top (required)>'
/var/canvas/Rakefile:4:in `require'
/var/canvas/Rakefile:4:in `<top (required)>'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/lib/rake/rake_module.rb:28:in `load'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/lib/rake/rake_module.rb:28:in `load_rakefile'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:689:in `raw_load_rakefile'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:94:in `block in load_rakefile'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:176:in `standard_exception_handling'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:93:in `load_rakefile'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:77:in `block in run'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:176:in `standard_exception_handling'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:75:in `run'
/var/canvas/vendor/bundle/ruby/2.1.0/gems/rake-10.4.2/bin/rake:33:in `<top (required)>'
/var/canvas/vendor/bundle/ruby/2.1.0/bin/rake:23:in `load'
/var/canvas/vendor/bundle/ruby/2.1.0/bin/rake:23:in `<main>'
helpdesk@university:/var/canvas/config$ cd ..
helpdesk@university:/var/canvas$ RAILS_ENV=production bundle exec rake db:migrate --trace
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:migrate
1: production:public
==  UseNewSisAppUrlAccountSetting: migrating ==================================
==  UseNewSisAppUrlAccountSetting: migrated (0.0349s) =========================

==  SetDevloperKeysAccountIdNil: migrating ====================================
==  SetDevloperKeysAccountIdNil: migrated (0.0372s) ===========================

==  DropUnusedColumnsFromGroups: migrating ====================================
-- remove_column(:groups, :hashtag)
   -> 0.0042s
-- remove_column(:groups, :show_public_context_messages)
   -> 0.0007s
==  DropUnusedColumnsFromGroups: migrated (0.0051s) ===========================

==  UpdateToolProxySharedSecret: migrating ====================================
-- change_column(:lti_tool_proxies, :shared_secret, :text)
   -> 0.0019s
==  UpdateToolProxySharedSecret: migrated (0.0021s) ===========================

==  AddUniqueIndexOnProvisionalGradeScorer: migrating =========================
-- change_column_null(:moderated_grading_provisional_grades, :position, true)
   -> 0.0011s
-- remove_index(:moderated_grading_provisional_grades, {:name=>:idx_mg_provisional_grades_unique_submission_position})
   -> 0.0049s
-- add_index(:moderated_grading_provisional_grades, [:submission_id, :scorer_id], {:unique=>true, :name=>:idx_mg_provisional_grades_unique_submission_scorer})
   -> 0.0161s
==  AddUniqueIndexOnProvisionalGradeScorer: migrated (0.1157s) ================

==  RemoveProvisionalGradePosition: migrating =================================
-- remove_column(:moderated_grading_provisional_grades, :position)
   -> 0.0007s
==  RemoveProvisionalGradePosition: migrated (0.0009s) ========================

==  GrandfatherCanvasAuthentication: migrating ================================
==  GrandfatherCanvasAuthentication: migrated (3.2957s) =======================

==  AddMobileOverridesToBrandConfig: migrating ================================
-- column_exists?(:brand_configs, :mobile_js_overrides)
   -> 0.0014s
-- add_column(:brand_configs, :mobile_js_overrides, :text)
   -> 0.0010s
-- column_exists?(:brand_configs, :mobile_css_overrides)
   -> 0.0012s
-- add_column(:brand_configs, :mobile_css_overrides, :text)
   -> 0.0007s
==  AddMobileOverridesToBrandConfig: migrated (0.0047s) =======================

==  DropCommentsFromRubricAssessments: migrating ==============================
==  DropCommentsFromRubricAssessments: migrated (0.0000s) =====================

==  ChangeAssignmentOverrideTitle: migrating ==================================
==  ChangeAssignmentOverrideTitle: migrated (0.0108s) =========================

==  CreateCanvadocsSubmissionsTable: migrating ================================
-- create_table(:canvadocs_submissions)
   -> 0.0097s
-- add_foreign_key(:canvadocs_submissions, :submissions)
   -> 0.0043s
-- add_foreign_key(:canvadocs_submissions, :canvadocs)
   -> 0.0059s
-- add_foreign_key(:canvadocs_submissions, :crocodoc_documents)
   -> 0.0037s
-- add_index(:canvadocs_submissions, :canvadoc_id, {:where=>"canvadoc_id IS NOT NULL"})
   -> 0.0044s
-- add_index(:canvadocs_submissions, :crocodoc_document_id, {:where=>"crocodoc_document_id IS NOT NULL"})
   -> 0.0036s
-- add_index(:canvadocs_submissions, :submission_id)
   -> 0.0041s
==  CreateCanvadocsSubmissionsTable: migrated (0.0365s) =======================

==  RunCanvadocsSubmissionsFixup: migrating ===================================
==  RunCanvadocsSubmissionsFixup: migrated (0.0073s) ==========================

==  AddAssignmentGradesPublishedAt: migrating =================================
-- add_column(:assignments, :grades_published_at, :datetime)
   -> 0.0023s
==  AddAssignmentGradesPublishedAt: migrated (0.0025s) ========================

==  FixUnresolvedLinksInQuizzes: migrating ====================================
==  FixUnresolvedLinksInQuizzes: migrated (0.0014s) ===========================

==  AddIncompleteRequirementsToProgressions: migrating ========================
-- add_column(:context_module_progressions, :incomplete_requirements, :text)
   -> 0.0196s
==  AddIncompleteRequirementsToProgressions: migrated (0.0197s) ===============

==  ReevaluateIncompleteProgressions: migrating ===============================
==  ReevaluateIncompleteProgressions: migrated (0.0495s) ======================

==  AddTransientBounceColumnsToCommunicationChannels: migrating ===============
-- add_column(:communication_channels, :last_transient_bounce_at, :datetime)
   -> 0.0017s
-- add_column(:communication_channels, :last_transient_bounce_details, :text, {:length=>32768})
   -> 0.0006s
==  AddTransientBounceColumnsToCommunicationChannels: migrated (0.0025s) ======

==  AddRefreshTokenToAccessTokens: migrating ==================================
-- add_column(:access_tokens, :crypted_refresh_token, :string)
   -> 0.0009s
-- add_index(:access_tokens, [:crypted_refresh_token], {:unique=>true})
   -> 0.0055s
==  AddRefreshTokenToAccessTokens: migrated (0.0066s) =========================

==  CreateSelectionTable: migrating ===========================================
-- create_table(:moderated_grading_selections)
   -> 0.0074s
-- add_index(:moderated_grading_selections, :assignment_id)
   -> 0.0030s
-- add_index(:moderated_grading_selections, [:assignment_id, :student_id], {:unique=>true, :name=>:idx_mg_selections_unique_on_assignment_and_student})
   -> 0.0034s
-- add_foreign_key(:moderated_grading_selections, :assignments)
   -> 0.0049s
-- add_foreign_key(:moderated_grading_selections, :users, {:column=>:student_id})
   -> 0.0032s
-- add_foreign_key(:moderated_grading_selections, :moderated_grading_provisional_grades, {:column=>:selected_provisional_grade_id})
   -> 0.0030s
==  CreateSelectionTable: migrated (0.0254s) ==================================

==  AddCommentsToCalendarEvents: migrating ====================================
-- add_column(:calendar_events, :comments, :text)
   -> 0.0015s
==  AddCommentsToCalendarEvents: migrated (0.0016s) ===========================

==  AddFinalToProvisionalGrades: migrating ====================================
-- add_column(:moderated_grading_provisional_grades, :final, :boolean, {:null=>false, :default=>false})
   -> 0.0070s
-- add_index(:moderated_grading_provisional_grades, [:submission_id], {:unique=>true, :where=>["final = ?", true], :name=>:idx_mg_provisional_grades_unique_submission_when_final})
   -> 3.4874s
-- remove_index(:moderated_grading_provisional_grades, {:name=>:idx_mg_provisional_grades_unique_submission_scorer})
   -> 0.0034s
-- add_index(:moderated_grading_provisional_grades, [:submission_id, :scorer_id], {:unique=>true, :name=>:idx_mg_provisional_grades_unique_sub_scorer_when_not_final, :where=>["final = ?", false]})
   -> 0.0061s
==  AddFinalToProvisionalGrades: migrated (3.5045s) ===========================

==  AddJitProvisioningToAuthenticationProviders: migrating ====================
-- add_column(:account_authorization_configs, :jit_provisioning, :bool, {:default=>false, :null=>false})
   -> 0.0157s
==  AddJitProvisioningToAuthenticationProviders: migrated (0.0158s) ===========

==  GrandfatherSelfRegistration: migrating ====================================
==  GrandfatherSelfRegistration: migrated (0.0117s) ===========================

==  AddGradedAnonymouslyToSubmissions: migrating ==============================
-- add_column(:submissions, :graded_anonymously, :boolean)
   -> 0.0009s
==  AddGradedAnonymouslyToSubmissions: migrated (0.0011s) =====================

==  FixImportedQuestionMediaComments: migrating ===============================
==  FixImportedQuestionMediaComments: migrated (0.0026s) ======================

==  ChangeAuthFilterToText: migrating =========================================
-- change_column(:account_authorization_configs, :auth_filter, :text)
   -> 0.0019s
==  ChangeAuthFilterToText: migrated (0.0021s) ================================

==  ExpandExternalFeedUrlColumns: migrating ===================================
-- change_column(:external_feed_entries, :url, :text)
   -> 0.0051s
-- change_column(:external_feed_entries, :source_url, :text)
   -> 0.0005s
-- change_column(:external_feed_entries, :author_url, :text)
   -> 0.0005s
==  ExpandExternalFeedUrlColumns: migrated (0.0064s) ==========================

==  AddTimestampsToGroupCategories: migrating =================================
-- change_table(:group_categories)
   -> 0.0021s
==  AddTimestampsToGroupCategories: migrated (0.0022s) ========================

==  LengthenUserServicesToken: migrating ======================================
-- change_column(:user_services, :token, :text)
   -> 0.0032s
==  LengthenUserServicesToken: migrated (0.0033s) =============================

==  AddAutoExpireTokensToDeveloperKey: migrating ==============================
-- add_column(:developer_keys, :auto_expire_tokens, :boolean)
   -> 0.0009s
==  AddAutoExpireTokensToDeveloperKey: migrated (0.0011s) =====================

==  AddSourceProvisionalGradeIdToProvisionalGrades: migrating =================
-- add_column(:moderated_grading_provisional_grades, :source_provisional_grade_id, :integer, {:limit=>8})
   -> 0.0007s
-- add_foreign_key(:moderated_grading_provisional_grades, :moderated_grading_provisional_grades, {:column=>:source_provisional_grade_id, :name=>"provisional_grades_source_provisional_grade_fk"})
   -> 0.0050s
==  AddSourceProvisionalGradeIdToProvisionalGrades: migrated (0.0061s) ========

==  AddUniqueIndexToTurnitinColumns: migrating ================================
-- add_index(:assignments, :turnitin_id, {:unique=>true, :algorithm=>:concurrently, :where=>"turnitin_id IS NOT NULL"})
   -> 0.0082s
-- add_index(:users, :turnitin_id, {:unique=>true, :algorithm=>:concurrently, :where=>"turnitin_id IS NOT NULL"})
   -> 0.0406s
==  AddUniqueIndexToTurnitinColumns: migrated (0.0492s) =======================

==  SetSearchPathsOnFunctions: migrating ======================================
-- execute("ALTER FUNCTION \"delayed_jobs_after_delete_row_tr_fn\"() SET search_path TO public")
   -> 0.0007s
-- execute("ALTER FUNCTION \"delayed_jobs_before_insert_row_tr_fn\"() SET search_path TO public")
   -> 0.0004s
-- execute("ALTER FUNCTION \"half_md5_as_bigint\"(varchar) SET search_path TO public")
   -> 0.0026s
==  SetSearchPathsOnFunctions: migrated (0.0041s) =============================

==  AddUpdatePayloadToLtiToolProxy: migrating =================================
-- add_column(:lti_tool_proxies, :update_payload, :text)
   -> 0.0008s
==  AddUpdatePayloadToLtiToolProxy: migrated (0.0009s) ========================

==  AddExpiresAtToJobs: migrating =============================================
-- add_column(:delayed_jobs, :expires_at, :datetime)
   -> 0.0016s
-- add_column(:failed_jobs, :expires_at, :datetime)
   -> 0.0008s
==  AddExpiresAtToJobs: migrated (0.0026s) ====================================

==  CreateMinimalistTheme: migrating ==========================================
==  CreateMinimalistTheme: migrated (0.0300s) =================================

==  AddPermissionsForModeratedGrading: migrating ==============================
==  AddPermissionsForModeratedGrading: migrated (0.0019s) =====================

==  CreateStateTheme: migrating ===============================================
==  CreateStateTheme: migrated (0.0082s) ======================================

==  FixDeprecatedPolymorphicNames: migrating ==================================
==  FixDeprecatedPolymorphicNames: migrated (0.2779s) =========================

==  ImproveMaxConcurrent: migrating ===========================================
-- execute("      CREATE OR REPLACE FUNCTION \"delayed_jobs_after_delete_row_tr_fn\" () RETURNS trigger AS $$\n      DECLARE\n        running_count integer;\n      BEGIN\n        IF OLD.strand IS NOT NULL THEN\n          PERFORM pg_advisory_xact_lock(half_md5_as_bigint(OLD.strand));\n          running_count := (SELECT COUNT(*) FROM delayed_jobs WHERE strand = OLD.strand AND next_in_strand = 't');\n          IF running_count < OLD.max_concurrent THEN\n            UPDATE delayed_jobs SET next_in_strand = 't' WHERE id = (\n              SELECT id FROM delayed_jobs j2 WHERE next_in_strand = 'f' AND\n              j2.strand = OLD.strand ORDER BY j2.id ASC LIMIT (OLD.max_concurrent - running_count) FOR UPDATE\n            );\n          END IF;\n        END IF;\n        RETURN OLD;\n      END;\n      $$ LANGUAGE plpgsql SET search_path TO public;\n")
   -> 0.0035s
==  ImproveMaxConcurrent: migrated (0.0037s) ==================================

==  AddFolderAndPositionIndexToAttachments: migrating =========================
-- add_index(:attachments, [:folder_id, :position], {:algorithm=>:concurrently, :where=>"folder_id IS NOT NULL"})
   -> 0.0143s
==  AddFolderAndPositionIndexToAttachments: migrated (0.0144s) ================

==  FixFolderNames: migrating =================================================
==  FixFolderNames: migrated (0.0022s) ========================================

** Invoke db:_dump (first_time)
** Execute db:_dump

[edit] Notification types

With the permissions set:

~/var/canvas$ RAILS_ENV=production bundle exec rake db:load_notifications

[edit] Reset Permissions

/var/canavs$ sudo chown canvasuser:helpdesk ./config/*.yml
/var/canvas$ sudo chown canvasuser:root ./config/cache_store.yml
/var/canvas$ sudo chown canvasuser:root ./config/redis.yml
/var/canvas$ sudo chmod 400 ./config/*.yml
/var/canvas$ sudo chown canvasuser ./config.ru

[edit] Restart Services

~/var/canvas$ sudo service postgresql restart
~/var/canvas$ sudo service apache2 restart 

[edit] Troubleshooting

During my install, once I was done, I got the following message:

Permission denied @ rb_sysopen - /var/canvas/config/cache_store.yml (Errno::EACCES)

It appears that the update reset the file permission for /var/canvas/config.ru back to the installation user I was running as, rather than the user canvas runs as. As such, I had to run:

~/var/canvas$ sudo chown canvasuser ./config.ru

[edit] Upgrading and installing bundles

If you get the same error as I did:

/var/canvas$ bundle install
Fetching source index from https://rubygems.org/
Resolving dependencies.....
You have requested:
  addressable = 2.3.8

The bundle currently has addressable locked at 2.3.5.
Try running `bundle update addressable`

Then instead first run:

~/var/canvas$ bundle update addressable

and you should get:

Your bundle is updated!
Gems in the groups sqlite and mysql were not installed.

Follow that up with:

~/var/canvas$ bundle install

and you should get:

Your bundle is complete!
Gems in the groups sqlite and mysql were not installed.
It was installed into ./vendor/bundle

[edit] Complied Assets

If you get an error:

rake aborted!
Undumpable Exception -- #<Errno::EACCES: Permission denied @ rb_sysopen - /var/canvas/config/domain.yml>

Then you'll need to temporarily change permissions to allow the update:

/var/canvas$ sudo chmod 660 ./config/domain.yml

The above makes the assumption that the user you are logged in as is either the file owner or part of the group owner.
Once the permission is set, try to upgrade again. If successful then:

/var/canvas$ sudo chmod 400 ./config/domain.yml

[edit] Database migrations

If you get an error:

rake aborted!
Errno::EACCES: Permission denied @ rb_sysopen - /var/canvas/config/cache_store.yml
Errno::EACCES: Permission denied @ rb_sysopen - /var/canvas/config/redis.yml
Errno::EACCES: Permission denied @ rb_sysopen - /var/canvas/config/database.yml
encryption key required, see security.yml.example
Errno::EACCES: Permission denied @ rb_sysopen - /var/canvas/config/outgoing_mail.yml
Errno::EACCES: Permission denied @ rb_sysopen - /var/canvas/config/file_store.yml
StandardError: An error has occurred, this and all later migrations canceled:

Just like before, you'll need to set the appropriate permissions:

/var/canvas$ sudo chmod 660 ./config/*.yml

The above makes the assumption that the user you are logged in as is either the file owner or part of the group owner. I was not, so I had to:

/var/canvas$ sudo chown canvasuser:canvasgroup ./config/*.yml

Once the permission is set, try to upgrade again. If successful then:

/var/canavs$ sudo chown canvasuser:canvasgroup ./config/*.yml
sudo chown canvasuser:canvasgroup ./config/cache_store.yml
sudo chown canvasuser:canvasgroup ./config/redis.yml
/var/canvas$ sudo chmod 400 ./config/*.yml

[edit] Notification types

If you get an error:

rake aborted!
Errno::EACCES: Permission denied @ rb_sysopen - /var/canvas/config/brandable_css.yml

Just like before, you'll need to set the appropriate permissions:

/var/canvas$ sudo chmod 660 ./config/*.yml

The above makes the assumption that the user you are logged in as is either the file owner or part of the group owner. I was not, so I had to:

/var/canvas$ sudo chown canvasuser:canvasgroup ./config/*.yml

Once the permission is set, try to upgrade again. If successful then:

/var/canavs$ sudo chown canvasuser:canvasgroup ./config/*.yml
sudo chown canvasuser:root ./config/cache_store.yml
sudo chown canvasuser:root ./config/redis.yml
/var/canvas$ sudo chmod 400 ./config/*.yml
Personal tools
Namespaces

Variants
Actions
Navigation
Mediawiki
Confluence
DevOps Tools
Ubuntu
Ubuntu 22
Mac OSX
Oracle Linux
AWS
Windows
OpenVPN
Grafana
InfluxDB2
TrueNas
OwnCloud
Pivotal
osTicket
OTRS
phpBB
WordPress
VmWare ESXI 5.1
Crypto currencies
HTML
CSS
Python
Java Script
PHP
Raspberry Pi
Canvas LMS
Kaltura Media Server
Plex Media Server
MetaSploit
Zoneminder
ShinobiCE
Photoshop CS2
Fortinet
Uploaded
Certifications
General Info
Games
Meal Plans
NC Statutes
2020 Election
Volkswagen
Covid
NCDMV
Toolbox