Canvas LMS/Upgrading
Contents |
Instruction source
All instructions are from the Canvas LMS Github wiki
Requirements
These upgrade instructions make the following assumptions:
- you installed canvas lms via git
- redis is running at a version greater than 2.6
- you are logged in as the original user who installed canvas and ran the git and gem installs
- you've created a backup or snapshot before continuing
- 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 |
---|
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 |
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