Difference between revisions of "Making changes show up during development"

Jump to: navigation, search
m (Restructure to give headings nicer URLs)
Line 1: Line 1:
 
Sometime, when you are trying to do Moodle development, you edit the code, and nothing seems to change as a result. This is because, to improve performance, Moodle now has all sorts of caching built in. When this is happening, this page will try to give you the quickest way to make your changes show up in all situation.
 
Sometime, when you are trying to do Moodle development, you edit the code, and nothing seems to change as a result. This is because, to improve performance, Moodle now has all sorts of caching built in. When this is happening, this page will try to give you the quickest way to make your changes show up in all situation.
  
However, this page is still quite new, so please help build it.
+
== General advice ==
  
==General advice==
+
# In your development site, change most of the admin settings like 'Cache language strings', 'Cache JavaScript' to be suitable for development. Note that doing this will slow down your development site a bit.
 
 
# In your development site, change most of the admin settings like 'Cache language strings', 'Cache JavaScript' to be suitalble for development. (But note that doing this will slow down your development site.
 
 
# If in doubt, visit <nowiki>http://your.domain/moodle</nowiki>'''/admin''' to check that the Moodle install is up-to-date.
 
# If in doubt, visit <nowiki>http://your.domain/moodle</nowiki>'''/admin''' to check that the Moodle install is up-to-date.
# And then <nowiki>http://your.domain/moodle</nowiki>'''/vle/admin/purgecaches.php''' and click the 'Purge all caches' button. This will slow things down for the next few requests, until the caches have re-populated.
+
# And then <nowiki>http://your.domain/moodle</nowiki>'''/admin/purgecaches.php''' and click the 'Purge all caches' button. This will slow things down for the next few requests, until the caches have re-populated. Note there is also a CLI tool to purge caches.
# Depending on what you changed in your plugin, then in addition to the above, you may need to remember to increase the version number in version.php, or the changes will not show up.
+
# Depending on what you changed in your plugin, then in addition to the above, you may need to remember to increase the version number in the plugin's version.php, or the changes will not show up.
# You may have forgotted to run grunt.
+
# You may have forgotten to run grunt.
# If you have just added a new Behat or PHPunit test, you may need to re-run admin/tool/.../cli/init.php.
+
# If you have just added a new Behat or PHPunit test, you may need to re-run admin/tool/.../cli/init.php
  
 
The above steps are a brute force approach. They will probably work, but are probably not the fastest way. Below, we list for all the various type of change you can make, the most efficient way to make the change show up.
 
The above steps are a brute force approach. They will probably work, but are probably not the fastest way. Below, we list for all the various type of change you can make, the most efficient way to make the change show up.
  
==Changes in the Moodle and Moodle plugins==
+
== PHP ==
 
 
===Changing PHP (*.php)===
 
  
You should just need to press reload (F5) in your browser.
+
After changing the PHP files (*.php), you should just need to press reload (F5) in your browser.
  
===Adding or removing an auto-loaded class===
+
=== Adding or removing an auto-loaded class ===
  
 
If you get class-not-found errors, you need to visit <nowiki>http://your.domain/moodle</nowiki>'''/admin'''.
 
If you get class-not-found errors, you need to visit <nowiki>http://your.domain/moodle</nowiki>'''/admin'''.
  
===Changing JavaScript (amd/src/*.js)===
+
== JavaScript ==
  
If you have Administration -> Appearance -> AJAX and Javascript -> Cache Javascript turned off, then you should just need to reload (F5) in your browser.
+
After editing the [[Javascript Modules]] source files (amd/src/*.js), if you have Administration -> Appearance -> AJAX and Javascript -> Cache Javascript turned off, then you should just need to reload (F5) in your browser.
  
 
If JS caching is on, you need to re-run grunt. (Do you also need to purge a cache??? I don't think so.)
 
If JS caching is on, you need to re-run grunt. (Do you also need to purge a cache??? I don't think so.)
  
===Changing CSS (*.css)===
+
== CSS ==
 +
 
 +
After changing the CSS styles (*.css) ...
 +
 
 +
== SCSS ==
 +
 
 +
After changing SCSS (*.scss) files ...
 +
 
 +
== LESS ==
 +
 
 +
After changing LESS (*.less) files ...
  
===Changing SCSS/LESS (*.scss/*.less)===
+
== Language strings ==
  
===Changing language strings (lang/en/type_plugin.php)===
+
After changing language pack strings (lang/en/type_plugin.php) ...
  
===Changing capabilities (db/access.php)===
+
== Capabilities ==
  
===Changing scheduled tasks (db/tasks.php)===
+
After changing capabilities (db/access.php) ...
  
===Changing web services (db/services.php)===
+
== Scheduled tasks ==
  
===Changing database strucutre (db/install.xml, db/upgrade.php)===
+
After changing scheduled tasks (db/tasks.php) ...
  
===Adding a new PHPunit test===
+
== Web services ==
  
===Adding a new Behat test===
+
After changing web services (db/services.php) ...
  
You need to re-run
+
== Database structure ==
  
php admin/tool/behat/cli/init.php
+
After changing the database scheme (db/install.xml, db/upgrade.php) ...
  
or any newly-added *.feature file will not be found.
+
== PHPunit ==
  
 +
== Behat ==
  
==Changes in mobile support for plugins==
+
After you add a new *.feature file, you need to re-run
  
If you are doing the kind of development descrived in [[Mobile support for plugins]], using a pre-built version of the app like https://mobileapp.moodledemo.net/.
+
$ php admin/tool/behat/cli/init.php
 +
 
 +
== Mobile support for plugins ==
 +
 
 +
If you are doing the kind of development described in [[Mobile support for plugins]], using a pre-built version of the app like https://mobileapp.moodledemo.net/.
  
 
Note, these steps were originally written by people mostly on question type plugins. Hopefully they are generally applicable, but if they don't make sense in your case, that might be why. Please edit to improve them.
 
Note, these steps were originally written by people mostly on question type plugins. Hopefully they are generally applicable, but if they don't make sense in your case, that might be why. Please edit to improve them.
  
===General note it you are seeing a lot of errors===
+
=== General note ===
  
 
If there are lots of red error messages appearing in the JavaScript console (but not the very common error 'ERROR Error: Uncaught (in promise): null...' that repeats every minute and fills the console logs!) it is often necessary to clear site data and restart.
 
If there are lots of red error messages appearing in the JavaScript console (but not the very common error 'ERROR Error: Uncaught (in promise): null...' that repeats every minute and fills the console logs!) it is often necessary to clear site data and restart.
Line 74: Line 85:
 
# F5 in the app to restart.
 
# F5 in the app to restart.
  
===Change in existing template (mobile/*.html)===
+
=== HTML template ===
 
 
Just pull down in the app to refresh.
 
  
===Adding a new template (mobile/*.html)===
+
After changing an existing template (mobile/*.html), just pull down in the app to refresh.
  
???
+
=== Client-side JavaScript ===
  
===Change to existing client-side JavaScript (mobile/*.js)
+
After changing an existing client-side JavaScript (mobile/*.js), press F5 in the browser developer tools to restart the app.
  
Press F5 in the browser developer tools to restart the app.
+
=== Server-side classes/output/mobile.php ===
  
===New client-side JavaScript (mobile/*.js)
+
???
  
===Change to server-side classes/output/mobile.php - ???
+
=== Mobile CSS ===
  
===Changing CSS===
+
# Bump version number in db/mobile.php
 
+
# Purge caches (specifically the tool_mobile/plugininfo MUC cache)
# bump version number in db/mobile.php
 
# purge caches (specifically the tool_mobile/plugininfo MUC cache)
 
 
# Press F5 to restart the app.
 
# Press F5 to restart the app.
 
==Changes in the Moodle mobile app==
 
 
TODO.
 

Revision as of 19:00, 26 March 2019

Sometime, when you are trying to do Moodle development, you edit the code, and nothing seems to change as a result. This is because, to improve performance, Moodle now has all sorts of caching built in. When this is happening, this page will try to give you the quickest way to make your changes show up in all situation.

General advice

  1. In your development site, change most of the admin settings like 'Cache language strings', 'Cache JavaScript' to be suitable for development. Note that doing this will slow down your development site a bit.
  2. If in doubt, visit http://your.domain/moodle/admin to check that the Moodle install is up-to-date.
  3. And then http://your.domain/moodle/admin/purgecaches.php and click the 'Purge all caches' button. This will slow things down for the next few requests, until the caches have re-populated. Note there is also a CLI tool to purge caches.
  4. Depending on what you changed in your plugin, then in addition to the above, you may need to remember to increase the version number in the plugin's version.php, or the changes will not show up.
  5. You may have forgotten to run grunt.
  6. If you have just added a new Behat or PHPunit test, you may need to re-run admin/tool/.../cli/init.php

The above steps are a brute force approach. They will probably work, but are probably not the fastest way. Below, we list for all the various type of change you can make, the most efficient way to make the change show up.

PHP

After changing the PHP files (*.php), you should just need to press reload (F5) in your browser.

Adding or removing an auto-loaded class

If you get class-not-found errors, you need to visit http://your.domain/moodle/admin.

JavaScript

After editing the Javascript Modules source files (amd/src/*.js), if you have Administration -> Appearance -> AJAX and Javascript -> Cache Javascript turned off, then you should just need to reload (F5) in your browser.

If JS caching is on, you need to re-run grunt. (Do you also need to purge a cache??? I don't think so.)

CSS

After changing the CSS styles (*.css) ...

SCSS

After changing SCSS (*.scss) files ...

LESS

After changing LESS (*.less) files ...

Language strings

After changing language pack strings (lang/en/type_plugin.php) ...

Capabilities

After changing capabilities (db/access.php) ...

Scheduled tasks

After changing scheduled tasks (db/tasks.php) ...

Web services

After changing web services (db/services.php) ...

Database structure

After changing the database scheme (db/install.xml, db/upgrade.php) ...

PHPunit

Behat

After you add a new *.feature file, you need to re-run

$ php admin/tool/behat/cli/init.php

Mobile support for plugins

If you are doing the kind of development described in Mobile support for plugins, using a pre-built version of the app like https://mobileapp.moodledemo.net/.

Note, these steps were originally written by people mostly on question type plugins. Hopefully they are generally applicable, but if they don't make sense in your case, that might be why. Please edit to improve them.

General note

If there are lots of red error messages appearing in the JavaScript console (but not the very common error 'ERROR Error: Uncaught (in promise): null...' that repeats every minute and fills the console logs!) it is often necessary to clear site data and restart.

  1. In browser developer tools, go to Application -> Clear storage.
  2. Close the browser, and re-launch.

Adding mobile support to a plugin for the first time

  1. Bump the plugin version number.
  2. Go to admin -> Notifications.
  3. F5 in the app to restart.

HTML template

After changing an existing template (mobile/*.html), just pull down in the app to refresh.

Client-side JavaScript

After changing an existing client-side JavaScript (mobile/*.js), press F5 in the browser developer tools to restart the app.

Server-side classes/output/mobile.php

???

Mobile CSS

  1. Bump version number in db/mobile.php
  2. Purge caches (specifically the tool_mobile/plugininfo MUC cache)
  3. Press F5 to restart the app.