Merge changes from master related to wiki docs.

Merge branch 'master' into concurrent_httpd

Conflicts:
	README.md
This commit is contained in:
2015-05-06 21:40:53 +02:00
37 changed files with 186 additions and 47 deletions

View File

@@ -38,11 +38,12 @@ For download, check
Tasks and issues are managed with github issue system
* See https://github.com/EiffelWebFramework/EWF/issues
* And visual dashboard: https://waffle.io/eiffelwebframework/ewf
* Forum/group post: https://groups.google.com/forum/#!forum/eiffel-web-framework
## Requirements
* Compiling from EiffelStudio 14.05 and more recent version of the compiler.
* Developped using EiffelStudio 15.05 (on Windows, Linux)
* Tested using EiffelStudio 15.05 with "jenkins" CI server (not anymore compatible with 6.8 due to use of `TABLE_ITERABLE')
* Compiling from EiffelStudio 13.11 to 15.05 and more recent version of the compiler.
* Currently being developped using EiffelStudio 15.01 (on Windows, Linux)
* Tested using EiffelStudio 15.01 with "jenkins" CI server (not anymore compatible with 6.8 due to use of `TABLE_ITERABLE')
* The code have to allow __void-safe__ compilation and non void-safe system (see [more about void-safety](http://docs.eiffel.com/book/method/void-safe-programming-eiffel) )
## How to get the source code?
@@ -100,6 +101,7 @@ review the [guidelines for contributing](CONTRIBUTING.md).
Keep track of development and community news.
* Follow [@EiffelWeb](https://twitter.com/EiffelWeb) on Twitter
* [Forum](https://groups.google.com/forum/#!forum/eiffel-web-framework) on Google groups.
* Follow our [page](https://plus.google.com/u/0/110650349519032194479) and [community](https://plus.google.com/communities/110457383244374256721) on Google+
* Have a question that's not a feature request or bug report? [Ask on the mailing list](http://groups.google.com/group/eiffel-web-framework)

133
doc/wiki/Deployment.md Normal file
View File

@@ -0,0 +1,133 @@
EWF Deployment
==============
##Apache on Windows
###Apache Install
- Check the correct version (Win 32 or Win64)
- Apache Version: Apache 2.4.4
- Windows: http://www.apachelounge.com/download/
###Deploying EWF CGI
####CGI overview
> A new process is started for each HTTP request. So if there are N request to the same CGI
> program, the code of the CGI program is loaded into memory N times.
> When a CGI program finished handling a request, the program terminates
1. Build EWF application.
```
ec -config app.ecf -target app_cgi -finalize -c_compile -project_path .
Note: change app.ecf and target app_cgi based on your own configuration.
```
2. Copy the generated exe file and the www content.
```
Copy the app.exe and the folder www into a folder served by apache2, for example under
<APACHE_PATH>/htdocs
<APACHE_PATH> = path to your apache installation
Edit httpd.conf under c:/<APACHE_PATH>/conf
DocumentRoot "c:/<APACHE_PATH>/htdocs"
<Directory "c:/<APACHE_PATH>/htdocs">
AllowOverride All --
Require all granted -- this is required in Apache 2.4.4
</Directory>
```
3. Check that you have the following modules enabled.
```
LoadModule cgi_module modules/mod_cgi.so
LoadModule rewrite_module modules/mod_rewrite.so
```
*Tip:*
To check the syntax of your httpd.conf file. From command line run the following.
```
$>httpd - t
```
####.htaccess CGI
http://perishablepress.com/stupid-htaccess-trics/
```
Options +ExecCGI +Includes +FollowSymLinks -Indexes
AddHandler cgi-script exe
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ $service [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !$service
RewriteRule ^(.*)$ $service/$1
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule
```
Replace $service with the name of your executable service, for example app_service.exe
##Deploying EWF FCGI
- To deploy FCGI you will need to download the mod_fcgi module.
- You can get it from here http://www.apachelounge.com/download/
###FCGI overview
> FastCGI allows a single, long-running process to handle more than one user request while keeping close to
> the CGI programming model, retaining the simplicity while eliminating the overhead of creating a new
> process for each request. Unlike converting an application to a web server plug-in, FastCGI applications
> remain independent of the web server.
1. Build EWF application
```
ec -config app.ecf -target app_fcgi -finalize -c_compile -project_path .
Note: change app.ecf and target app_fcgi based on your own configuration.
```
2. Copy the generated exe file and the www content
```
Copy the app.exe and the folder "www" into a folder served by apache2, for example under
<APACHE_PATH>/htdocs.
<APACHE_PATH> = path to your apache installation
Edit httpd.conf under c:/<APACHE_PATH>/conf
DocumentRoot "c:/<APACHE_PATH>/htdocs"
<Directory "c:/<APACHE_PATH>/htdocs">
AllowOverride All --
Require all granted -- this is required in Apache 2.4.4
</Directory>
```
Check that you have the following modules enabled.
```
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule fcgid_module modules/mod_fcgid.so
```
By default Apache does not comes with fcgid module, so you will need to
download it, and put the module under Apache2/modules
####.htaccess FCGI
http://perishablepress.com/stupid-htaccess-tricks/
```
Options +ExecCGI +Includes +FollowSymLinks -Indexes
<IfModule mod_fcgid.c>
AddHandler fcgid-script .ews
FcgidWrapper $FULL_PATH/$service .ews
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule ^$ service.ews [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteCond %{REQUEST_URI} !service.ews
RewriteRule ^(.*)$ service.ews/$1 RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>
```
Replace $service with the name of your executable $service, for example app_service.exe
You will need to create an service.ews file, this file will be located at the same place where you
copy your app service executable.

View File

@@ -1,4 +1,4 @@
Menu :: [[Doc_Getting_Started|Getting Started]] :: [[Doc_Community|Community]]
Menu :: [[Doc_Getting_Started.mediawiki|Getting Started]] :: [[Community-collaboration.md|Community]]
= Getting Started =
This page will help you to get started with EWF. We will first see how to install EWF and then how to compile and run the venerable Hello World example.

View File

@@ -1,4 +1,4 @@
Menu :: [[Doc_Getting_Started|Getting Started]] :: [[Doc_Community|Community]]
Menu :: [[Doc_Getting_Started.mediawiki|Getting Started]] :: [[community.md|Community]]
= Eiffel Web Framework =
Framework to build web applications in Eiffel

View File

@@ -1 +0,0 @@
See WSF_ROUTER

View File

@@ -1 +0,0 @@
See WSF_CONNECTOR

View File

@@ -1 +0,0 @@
See WSF_ROUTER

View File

@@ -1,5 +1,5 @@
- See proposed specifications: [EWSGI specification](./EWSGI-specification)
- See [Open questions](./EWSGI-Open-Questions)
- See proposed specifications: [EWSGI specification](EWSGI-specification.md)
- See [Open questions](EWSGI-Open-Questions.md)
- And below the various proposals and associated decision
----

View File

@@ -6,21 +6,21 @@ The official documentation/wiki is located at [https://github.com/EiffelWebFrame
## Organization ##
- Mailing list: please visit and subscribe to the mailing list page [http://groups.google.com/group/eiffel-web-framework](http://groups.google.com/group/eiffel-web-framework) ![logo](http://groups.google.com/intl/en/images/logos/groups_logo_sm.gif)
- Most of the topics are discussed on the mailing list (google group).
- For time to time we have [web meetings](./wiki/Meetings), and less frequently [physical meetings](./wiki/Meetings) that occurs usually during other Eiffel related events.
- For time to time we have [web meetings](project/Meetings.md), and less frequently [physical meetings](project/Meetings.md) that occurs usually during other Eiffel related events.
## Documentation ##
- [Documentation](./Documentation)
- [Documentation](documentation/README.md)
## Contributions ##
- You want to contribute or follow the progress/discussion, see the [collaboration page](./wiki/Community-collaboration)
- Potential tasks/projects on EWF: [Projects page](./wiki/Projects)
- You want to contribute or follow the progress/discussion, see the [collaboration page](community.md)
- Potential tasks/projects on EWF: [Projects page](project/Projects.md)
## See also ##
- [list of tasks, and a potential roadmap](./wiki/Tasks-Roadmap)
- [General source structure of this project](./wiki/Source-structure)
- EWSGI: [Eiffel Web Server Gateway Interface](./wiki/EWSGI)
- [Overview of the server side architecture](./wiki/Spec-Server-Architecture)
- This project is also a collection of [Libraries](./wiki/Libraries) related to the Web
- [list of tasks, and a potential roadmap](project/Tasks-Roadmap.md)
- [General source structure of this project](Source-structure.md)
- EWSGI: [Eiffel Web Server Gateway Interface](EWSGI/README.md)
- [Overview of the server side architecture](Spec-Server-Architecture.md)
- This project is also a collection of [Libraries](Libraries.md) related to the Web
## Note ##
- This wiki needs to be updated, in the meantime, please have a look at the presentation: [https://docs.google.com/presentation/pub?id=1GPFv6aHhTjFSLMnlAt-J4WeIHSGfHdB42dQxmOVOH8s&start=false&loop=false&delayms=3000](https://docs.google.com/presentation/pub?id=1GPFv6aHhTjFSLMnlAt-J4WeIHSGfHdB42dQxmOVOH8s&start=false&loop=false&delayms=3000)

View File

@@ -46,3 +46,6 @@ It's fairly easy to write your own connector. Just inherit from these classes:
* WGI_INPUT_STREAM
* WGI_OUTPUT_STREAM
* WSF_SERVICE_LAUNCHER
See WSF_CONNECTOR

View File

@@ -27,7 +27,7 @@ This is the low level of the framework, at this point, `req` provides access to
The response `res` is the interface to send data back to the client.
For convenience, the framework provides richer service interface that handles the most common needs (filter, router, ...).
> [Learn more about service](Documentation__Service)
> [Learn more about service](Service.md)
<a name="wiki-request"></a><a name="wiki-response"></a><a name="wiki-request-and-response"></a>
<a name="request"></a><a name="response"></a><a name="request-and-response"></a>
@@ -50,7 +50,7 @@ Any incoming http request is represented by an new object of type **WSF_REQUEST*
The **WSF_RESPONSE** represents the communication toward the client, a service need to provide correct headers, and content. For instance the `Content-Type`, and `Content-Length`. It also allows to send data with chunked encoding.
> [Learn more about request](Documentation__Request) and [about response](Documentation__Response)
> [Learn more about request](Request.md) and [about response](Response.md)
<a name="wiki-connector"></a>
<a name="connector"></a>
@@ -66,7 +66,7 @@ Currently 3 main connectors are available:
At compilation time, you can use a default connector (by using the associated default lib), but you can also use a mixed of them and choose which one to execute at runtime.
It is fairly easy to add new connector, it just has to follow the EWSGI interface
> [Learn more about connector](Documentation__Connector)
> [Learn more about connector](Connector.md)
<a name="wiki-router"></a>
<a name="router"></a>
@@ -113,7 +113,7 @@ How we do that in EWF? : Router with (or without context).
Related code: wsf_router, wsf_router_context
Examples
> [Learn more about router](Documentation__Router)
> [Learn more about router](Router.md)
# EWF components
## URI Handler:
@@ -180,25 +180,26 @@ examples
External libraries are included, such as Cypress OAuth (Security), HTML parsing library, Template Engine Smarty.
## server
* __ewsgi__: Eiffel Web Server Gateway Interface read more
* __ewsgi__: Eiffel Web Server Gateway Interface [read more](../EWSGI/index.md).
* connectors: various web server connectors for EWSGI
* __libfcgi__: Wrapper for libfcgi SDK
* __wsf__: Web Server Framework [read more]
* __router__: URL dispatching/routing based on uri, uri_template, or custom read more
* __wsf__: Web Server Framework
* __router__: URL dispatching/routing based on uri, uri_template, or custom [read more](Router.md).
* __filter__: Filter chain [read more](Filter.md).
* __wsf_html__: (html and css) Content generator from the server side.
* CMS example: <https://github.com/EiffelWebFramework/cms/tree/master/example>
## protocol
* __http__: HTTP related classes, constants for status code, content types, ... read more
* __uri_template__: URI Template library (parsing and expander) read more
* __content_negotiation__: CONNEG library (Content-type Negociation) read more
* __http__: HTTP related classes, constants for status code, content types, ...
* __uri_template__: URI Template library (parsing and expander)
* __content_negotiation__: [CONNEG](Library-conneg.md) library (Content-type Negociation)
## Client
* __http_client__: simple HTTP client based on cURL readmore
* __http_client__: simple [HTTP client](HTTP-client.library.md) based on cURL
* __Firebase API__: <https://github.com/EiffelWebFramework/Redwood>
## Text
* __encoder__: Various simple encoders: base64, url-encoder, xml entities, html entities read more
* __encoder__: Various simple encoders: base64, url-encoder, xml entities, html entities
## Utils
* __error__: very simple/basic library to handle error

View File

@@ -1,3 +1,6 @@
The primary goal of the router (class _WSF_ROUTER_) is to dispatch requests according to the request URI.
See WSF_ROUTER
**TODO**: describe the router interface

View File

@@ -23,4 +23,4 @@ is_system_options_forbidden.
WSF_ROUTED_SKELETON_SERVICE also inherits from WSF_PROXY_USE_POLICY. This determines if the server will require clients to use a proxy server. By default, it will do so for HTTP/1.0 clients. This is a sensible default, as the framework assumes an HTTP/1.1 client throughout. If you are sure that you will only ever have HTTP/1.1 clients, then you can instead inherit from WSF_NO_PROXY_POLICY, as RESTBUCKS_SERVER does. If not, then you need to implement proxy_server.
Next you have to [write your handler(s)](./Writing-the-handlers)
Next you have to [write your handler(s)](Writing-the-handlers.md)

View File

@@ -218,6 +218,6 @@ This routine is called for a normal (updating) PUT request. You have to update t
## Implementing the policies
* [WSF_OPTIONS_POLICY](./WSF_OPTIONS_POLICY)
* [WSF_PREVIOUS_POLICY](./Wsf-previous-policy)
* [WSF_CACHING_POLICY](./Wsf-caching-policy)
* [WSF_OPTIONS_POLICY](WSF_OPTIONS_POLICY.md)
* [WSF_PREVIOUS_POLICY](Wsf-previous-policy.md)
* [WSF_CACHING_POLICY](Wsf-caching-policy.md)

View File

@@ -1,4 +1,4 @@
# Previous and future meetings
* [Web-meeting: 2012-09-18](./Web-meeting-2012-09-18)
* [Web-meeting: 2012-09-18](meetings/Web-meeting-2012-09-18.md)
* For previous meetings, check the ["meeting" topics](https://groups.google.com/forum/?fromgroups=#!tags/eiffel-web-framework/meeting) on the [forum](http://groups.google.com/group/eiffel-web-framework)

View File

@@ -1,5 +1,5 @@
Use this to suggest new projects, or request features.
The content of this page will be moved to the main [Projects](./Projects) page for time to time.
The content of this page will be moved to the main [Projects](Projects.md) page for time to time.
For any entry, please use this template
----

View File

@@ -236,4 +236,4 @@ If you are a student, don't hesitate to pick one, or even suggest a new project,
----
# Feel free to add new idea below this line
----
Use the following page [Projects new suggestions](./Projects new suggestions) to suggest new project, or request a feature.
Use the following page [Projects new suggestions](Projects-new-suggestions.md) to suggest new project, or request a feature.

View File

@@ -1,4 +1,4 @@
Check new roadmap wiki page: [roadmap](./roadmap)
Check new roadmap wiki page: [roadmap](roadmap.md)
## Future
* Focus on REST API
- Hypermedia API
@@ -32,5 +32,5 @@ Check new roadmap wiki page: [roadmap](./roadmap)
* Installation scripts
## Contributors ##
- See [the collaboration page](./Community-collaboration)
- See [the collaboration page](../community.md)

View File

@@ -0,0 +1,4 @@
# Upcoming versions
# Current state: oct-2013
- check previous wiki page: [Tasks roadmap](Tasks-roadmap.md)

View File

@@ -1,4 +0,0 @@
# Upcoming versions
# Current state: oct-2013
- check previous wiki page: [Tasks roadmap](./Tasks roadmap)