Canvas LMS/Upgrading

From r00tedvw.com wiki
Revision as of 13:15, 22 January 2016 by R00t (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Contents

Instruction source

All instructions are from the Canvas LMS Github wiki

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

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

Upgrade and Install Bundled Gems

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

Upgrade and Install Node Modules

~/var/canvas$ npm install

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

Complied Assets

With the permissions set:

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

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
[email protected]:/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)
[email protected]:/var/canvas$ cd config
[email protected]:/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
[email protected]:/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>'
[email protected]:/var/canvas/config$ cd ..
[email protected]:/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

Notification types

With the permissions set:

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

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

Restart Services

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

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

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

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

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

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
Oracle Linux
AWS
Windows
OpenVPN
Grafana
Pivotal
osTicket
OTRS
phpBB
WordPress
VmWare ESXI 5.1
Crypto currencies
HTML
CSS
Python
Java Script
PHP
Raspberry Pi
Canvas LMS
Kaltura Media Server
MetaSploit
Zoneminder
Photoshop CS2
Fortinet
Uploaded
Certifications
General Info
Games
Meal Plans
NC Statutes
Toolbox