When needing to upload changes to an existing design document, to avoid having everything hang for potentially hours while generating the views - follow the descriptions below:
CouchDB view index filenames are based on the contents of the design document (not its name, ID or revision). This means that two design documents with identical view code will share view index files.
Example: http://localhost:5984/database/_design/ddoc needs to be updated
So the simple approach is:
Upload the old design doc to _design/ddoc-old (or copy _design/ddoc to _design/ddoc-old) if you want an easy way to rollback in case of problems. This will cause the view indexes for _design/ddoc to be shared with _design/ddoc-old.
Upload the updated design doc to _design/ddoc-new.
Query a view in _design/ddoc-new to trigger view index generation. You can track the indexing progress via Futon at http://localhost:5984/_utils/status.html or by requesting http://localhost:5984/_active_tasks directly.
Reupload the updated design doc to _design/ddoc (or copy _design/ddoc-new to _design/ddoc) when view index generation is complete. This will cause the indexes built for _design/ddoc-new to be shared with _design/ddoc. The updated design doc is now live with view indexes ready to go!
Delete _design/ddoc-new and/or _design/ddoc-old at your discretion. Don't forget to also run a clean-up to reclaim the disk space used by their view indexes: http://wiki.apache.org/couchdb/HTTP_view_API#View_Cleanup
To copy a document use:
curl -X COPY <URL of source design document> -H "Destination: <ID of destination design document>"
When copying a document to an already existing destination, you'll also need to supply the revision of the document you want to overwrite:
curl -X COPY <URL of source design document> -H "Destination: <ID of destination design document>?rev=<revision>"
curl -X COPY http://localhost:5984/database/_design/ddoc -H "Destination: _design/ddoc-old"
Note: This approach will work for normal couch views, couchdb-lucene views (fulltext), and should also work for bigcouch clusters - to my understanding