Subversion 1.8.0 has switched from neon to serf for HTTP access. The Serf-based HTTP access library would use chunked transfer encoding for most requests.

Here we cleared and made recomendations and solution on mixed environments, for those that using not well configured linuxes (such those using rolling releases as alpine, arch etc) and stupid winbuntu based:

CASE 1: 411 Length required:
..such as Nginx prior to 1.3.9 or hiawatta (if are acting as reverse proxy frontend) will responds with a 411 Length Required, Subversion would sometimes either treat this as a fatal error, such as:

CLIENT SIDE SOLUTION that must be made:
A http-chunked-requests option has been added to the ~/.subversion/servers per user configuration file. Users who wish to avoid the additional request may set that option to yes or no in order to short-circuit the additional request and avoid making it. We recommend not to set that option (or to set it to its default value, auto) unless you have special circumstances which require it (such as an unusually high latency).

When using clients version 1.8/1.9, agains olders servers 1.7/1.6/1.5 versions, you must set this to "no" in order to avoid the described problems.

SEVER SIDE SOLUTIONS and recomendations:
There options must be set in server, specially if your server subversion software differts from subversion clients, to already go better the compatibility in high latency and high traffic sidtes

config option

apache2

lighttpd

Value must

maximum size of andXML-based request body

LimitXMLRequestBody

server.max_request-size

0

Limit the size of data in body request client

LimitRequestBody

server.max_request-size

2097152

number of requests allowed per connection alive

MaxKeepAliveRequests

server.max-keep-alive-requests

7500

Of course, lasted option its only if u configured a Keep Alive to "on" that increase performace respect each client connection, but of course assumed u have already at least 1G to 2G of RAM memory on server hardware.

RECOMENDATIONS:

For those with multipurposes sites, the most realitable are using two servers, one with main entry point using lighttpd, and other with apache2 and subversion. The server with lighttpd will acts as proxy reverse, let the apache only for subversion or git. Apache could'n rely for high traffic performance, and lighty are made for that work!

The benefits of using KeepAlive, and Subversion newer options is an increase in the speed and reliability of svn while reducing cpu usage since it will not open and close as many connections when checking out code.

Those all are stupids, subversion team do not tell the complete history:

On middle sites with few repositoryes, these are good, but.. the downside is that memory usage will increase due to the fact that svn will be holding many connections at same time and waiting for requests and responses over those connections. So make sure to monitor memory usage and gauge what is right for you.

In conclusion, switch to Git and lighttpd! Default values of lighty are the recomended for git and high traffic sites.

Not the same, beware! The gambas IDE run the embedded code on its own http web server using port 8080, the server path will be the application path, the server web root will be root of the server runnign from the url web browser as if the hole only for the project! When the CGI is deployed this radically changes confusing it the developer!

1) SOFTWARE REQUIREMENTS:

We need a webserver, a gambas ide compiler and gambas script interpreter, unless u only make cgi's the scripter are innecesary. The recomended install command must be done open a console and swichting to root:

Requeriment

Available

recomended and install command

explanation

Webserver

apache2
lighttpd
hiawatha

apt-get install lighttpd apache2.2-utils

provides the cgi andler and web interface to request to bypass to the cgi produced by gambas, webservers like nginx does not provide good cgi handler and its not supported, hiawatha its not recomended for production large deployments

permits compiling the program tht will be acts as cgi program and produces the html rendering. The ide component was given due install many of the necesary, but in server its not recomended.

Scripter

gambas3-scripter

apt-get install gambas3-scripter

permits interpret a source files and based on their content as script will render html or not using logic, its only recomended for static content that only need minimal logic, when fails show the source code in webserver

3) DEPLOYMENT AND GIVE UP RESULTS

3.1) configuring CGI

On standars web server of providers webservers ther's only two paths where the "produced program" (the gambas compiled program u make) can be deployed, in the "/cgi-bin/" web path, and there's two only places for them, globally and per users, theres configurations for both cases:

() in apache there's still no way to workaround the interpreting of the scrips at the momento of writing this how to

2) producing the program cgioose th

In the ide, go to menu->project

Create-> executable

If u use the "per user configuration" choose the directory output as "public_html" under your home

Choose the name of the output program, by default "programname.gambas"

If the webserver only permits cgi's porgrams with .cgi extension put in second input: mv $(FILE) $(FILE).cgi

The cgi program now can be invoked from url http://localhost/~username/cgi-bin/programname.gambas.cgi

All of this its taking in consideration that inside your home, there's a "public_html" directory, used and handled by the webserver as per user web content, and also under this there's a "cgi-bin" directory, that its for cgi programs, and the webservers software are only apache2 or lighttpd.

Those guys that code in php will find funny that making objects of data in tables are easy.. arrays, arrays.. that's why in php an array can handle any value, and the index can be any type, not only integer indexs. The article was inspired in a problem in gambas mail list:http://gambas.8142.n7.nabble.com/collection-of-collection-problem-tp58654p58659.htmlBut wait, in php, an array can handle multiple arrays, that its not the same of a multidimensional array! care! That its the better in this special case of this article!I mean: an array inside an array! and the values and key of those arrays can be any type.. great!In java, ther's some difficulty, a collection its the only way to do that and there's another, only one type of values can handle in a collection.Unfortunatelly in Gambas its more harded yet: must be collections and must iterate twice to handle values in.An Example:..lets get simple: a registry "order" that have many "products" so :In java, there's DAO objects, but with collections, and in php more easy, only an array in array!

The Data example:

* Main object: object (1 element with many attrs) and one of those attrs, its the cod_contenido , of the products of the order * Second objects: attr:cod_contenido-> (object with many elements, and each element many atrrs)

|-----------------------------|

| ORD101 |

|-----------------------------|

| cod_orde:101 |

| des_order:description bla bl|----------------------------|

| cod_contents:1011 | CON1011 |

|-----------------------------|----------------------------|

| cod_product:101, |

| cod_order:101, |

| can_product:2 |

|----------------------------|

| cod_product:102 |

| cod_order:101 |

| can_product:12 |

|----------------------------|

The make it on php:

In php only has to convert to array each recordset and then iterate each element,, the trick that makes php easy to use its that in the interesting key "cod_contenido" we can stop, iterate again and put inside the main array.. lets see:

The make it on Gambas:

In gambas there's quite more complicated due inside the key name, we will have and reference, an the real value will be another object, in php we can access directly no matter if are other king of data, in gambas we must iterate for each object that will put in collection:

so the solution its to grep and replace (take easy, u can made it in geany of venenux) using a regular expresion:

1) open geany
2) load the script
3) menu->search->replace
4) marks use regular expr
5) the word to search will be COMMENT \'.*\'
6) the word to replace it will be empty
7) pull down avanced "Replace all" and select Document
8) that's all

now at least COMMENT keyword was eliminated from script and sqlite can procesed the sql.