Changeset 522


Ignore:
Timestamp:
03/17/14 21:50:17 (11 years ago)
Author:
hendrikvanantwerpen
Message:
  • Add option to deploy source to Heroku (for debugging).
  • Rewrite xhr so requests are not serialized anymore.
  • Give more sane errors on request errors to Couch (like network errors and such).
Location:
Dev/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • Dev/trunk/Gruntfile.js

    r520 r522  
    3131                       ['path-check:foreman'
    3232                       ,'compile'
    33                        ,'foreman:dev']);
     33                       ,'foreman:run-src']);
    3434    grunt.registerTask('build',
    3535                       "Compile and make a Dojo build of the client (compress sources).",
     
    4343                       ['path-check:foreman'
    4444                       ,'build'
    45                        ,'foreman:build']);
     45                       ,'foreman:run-build']);
    4646    grunt.registerTask('deploy',
    4747                       "Make a build and deploy it to Heroku.",
     
    5050                       ,'svninfo'
    5151                       ,'build'
    52                        ,'git_deploy:deploy']);
     52                       ,'git_deploy:deploy-build']);
     53    grunt.registerTask('deploy-src',
     54                       "Deploy sources to Heroku (FOR DEBUGGING ONLY).",
     55                       ['path-check:svn'
     56                       ,'path-check:git'
     57                       ,'svninfo'
     58                       ,'compile'
     59                       ,'git_deploy:deploy-src']);
    5360    // database management
    5461    grunt.registerTask('db-backup-cloud-to-dated-local',
     
    126133        },
    127134        foreman: {
    128             dev: {
     135            'run-src': {
    129136                options: {
    130137                    cwd: srcDir
    131138                }
    132139            },
    133             build: {
     140            'run-build': {
    134141                options: {
    135142                    cwd: buildDir
     
    138145        },
    139146        git_deploy: {
    140             deploy: {
     147            'deploy-build': {
    141148                options: {
    142149                    url: 'git@heroku.com:quod-erat.git',
    143150                    branch: 'master',
    144                     message: "Deployment of revision <%= svninfo.rev %> on <%= grunt.template.today() %>."
     151                    message: "Build deployment of revision <%= svninfo.rev %> on <%= grunt.template.today() %>."
    145152                },
    146153                src: buildDir
     154            },
     155           
     156            'deploy-src': {
     157                options: {
     158                    url: 'git@heroku.com:quod-erat.git',
     159                    branch: 'master',
     160                    message: "Source deployment of revision <%= svninfo.rev %> on <%= grunt.template.today() %>."
     161                },
     162                src: srcDir
    147163            }
    148164        },
  • Dev/trunk/src/client/qed-client/xhr.js

    r487 r522  
    22    "./session",
    33    "dojo/Deferred",
     4    "dojo/_base/array",
    45    "dojo/_base/lang",
    5     "dojo/on",
    6     "dojo/_base/xhr"
    7 ], function(session, Deferred, lang, on, xhr) {
     6    "dojo/_base/xhr",
     7    "dojo/on"
     8], function(session, Deferred, array, lang, xhr, on) {
    89
    9     var user = session.get();
     10
    1011    var queue = [];
    11    
    12     on(session, 'change', function(newUser){
     12    var user;
     13    var generation = 0;
     14
     15    on(session, 'change', setUser);
     16    setUser(session.get());
     17
     18    function setUser(newUser) {
    1319        user = newUser;
    14         retry();
    15     });
    16 
    17     function retry() {
    18         if (user && queue.length > 0) {
    19             var item = queue.shift();
    20             console.log("Retry",item.options.url);
    21             real_request(item);
     20        generation += 1;
     21        if ( user ) {
     22            // we make a local copy, just in case the requests cause
     23            // events to happen
     24            var q = queue;
     25            queue = [];
     26            array.forEach(q,real_request);
     27        } else {
     28            session.restore();
    2229        }
    2330    }
    24    
     31
    2532    function real_request(item) {
     33        var req_generation = generation;
    2634        var req = xhr(item.method,lang.mixin(item.options||{},{
    2735            failOk: true
     
    2937        item.promise.ioArgs = req.ioArgs;
    3038
    31         req.then(function(result){
     39        console.log("Do request",item.options.url);
     40        req.then(function(result) {
    3241            item.dfd.resolve(result);
    33             retry();
    3442        }, function(error){
    3543            if ( error.response.status === 401 ) {
    36                 queue.unshift(item);
    37                 session.restore();
     44                if ( user ) {
     45                    if ( req_generation === generation ) {
     46                        console.log("Retry after reauthentication",item.options.url);
     47                        // we need to reauth
     48                        queue.push(item);
     49                        setUser(null);
     50                    } else {
     51                        console.log("Retry immediately",item.options.url);
     52                        // we already did, redo request right away
     53                        real_request(item);
     54                    }
     55                } else {
     56                    console.log("Retry when authenticated",item.options.url);
     57                    queue.push(item);
     58                }
    3859            } else {
    3960                item.dfd.reject(error);
    40                 retry();
    4161            }
    4262        });
    4363    }
    4464   
    45     var _request = function(method, options) {
     65    var _xhr = function(method, options) {
    4666        var item = {
    4767            method: method,
     
    5070        };
    5171        item.promise = lang.delegate(item.dfd.promise);
    52         // only do the request directly if we are authenticated and
    53         // there are no earlier requests queued.
    54         if ( user && queue.length === 0 ) {
    55             console.log("Request",options.url);
     72        // only do the request directly if we are authenticated
     73        if ( user ) {
     74            console.log("Immediate",options.url);
    5675            real_request(item);
    5776        } else {
    58             console.log("Push",options.url);
     77            console.log("Delay until authenticated",options.url);
    5978            queue.push(item);
    6079        }
     
    6281    };
    6382
    64     return _request;
     83    return _xhr;
    6584});
  • Dev/trunk/src/server/util/couch.js

    r494 r522  
    7777        };
    7878    }, function(err) {
    79         return Q.reject(err);
     79        return Q.reject({error:err.message});
    8080    });
    8181    return res;
Note: See TracChangeset for help on using the changeset viewer.