diff --git a/.gitignore b/.gitignore index 411c9276..514304d7 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,5 @@ git-credential* .gitignore .pydevproject .idea - - - - +/errors/* +/static_chaps/* diff --git a/README.md b/README.md index 53a3a2ae..1ba17877 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ License: [Creative Commons BY-NC-ND](http://creativecommons.org/licenses/by-nc- [Read the book online](http://web2py.com/books) -The gitbub repo includes code and sources. The book sources are in the sources folder. You can contribute to the book by submitting patches. +The github repo includes code and sources. The book sources are in the sources folder. You can contribute to the book by submitting patches. ## Notes to translators @@ -39,4 +39,4 @@ Once done submit patch as a pull request on github or email the author. ### Translator agreement -If you plan to help with the book translation please contact me we can reach an agreement about copyright and distribution. \ No newline at end of file +If you plan to help with the book translation please contact me we can reach an agreement about copyright and distribution. diff --git a/sources/29-web2py-english/13.markmin b/sources/29-web2py-english/13.markmin index 3ef310a2..07d42863 100644 --- a/sources/29-web2py-english/13.markmin +++ b/sources/29-web2py-english/13.markmin @@ -121,13 +121,13 @@ Here are some steps to install apache+python+mod_wsgi+web2py+postgresql from scr On Ubuntu: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-ubuntu.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-ubuntu.sh chmod +x setup-web2py-ubuntu.sh sudo ./setup-web2py-ubuntu.sh `` On Fedora: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-fedora.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-fedora.sh chmod +x setup-web2py-fedora.sh sudo ./setup-web2py-fedora.sh `` diff --git a/sources/32-web2py-german/13.markmin b/sources/32-web2py-german/13.markmin index ddfb6639..bae1c066 100644 --- a/sources/32-web2py-german/13.markmin +++ b/sources/32-web2py-german/13.markmin @@ -84,13 +84,13 @@ Here are some steps to install apache+python+mod_wsgi+web2py+postgresql from scr On Ubuntu: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-ubuntu.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-ubuntu.sh chmod +x setup-web2py-ubuntu.sh sudo ./setup-web2py-ubuntu.sh `` On Fedora: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-fedora.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-fedora.sh chmod +x setup-web2py-fedora.sh sudo ./setup-web2py-fedora.sh `` diff --git a/sources/33-web2py-japanese/13.markmin b/sources/33-web2py-japanese/13.markmin index 9d6dab5a..de86302b 100644 --- a/sources/33-web2py-japanese/13.markmin +++ b/sources/33-web2py-japanese/13.markmin @@ -85,13 +85,13 @@ python anyserver.py -h Ubuntuでは: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-ubuntu.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-ubuntu.sh chmod +x setup-web2py-ubuntu.sh sudo ./setup-web2py-ubuntu.sh `` Fedoraでは: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-fedora.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-fedora.sh chmod +x setup-web2py-fedora.sh sudo ./setup-web2py-fedora.sh `` @@ -516,9 +516,9 @@ server { uwsgi_param UWSGI_SCHEME $scheme; uwsgi_param SERVER_SOFTWARE nginx/$nginx_version; } - + } -``:code +``:code ファイルのシンボリックリンクとデフォルトの削除が必要です。 @@ -533,16 +533,16 @@ mkdir /etc/nginx/ssl cp web2py.key /etc/nginx/ssl cp web2py.crt /etc/nginx/ssl ``:code - + その後、uWSGIをインストールしセットアップを行う必要があります。 - + `` sudo mkdir /etc/uwsgi sudo mkdir /var/log/uwsgi ``:code さらに、"/etc/uwsgi/web2py.xml" 設定ファイルを作成します: - + `` /tmp/web2py.socket @@ -569,7 +569,7 @@ sudo mkdir /var/log/uwsgi また二番目の設定ファイル "/etc/init/uwsgi-emperor.conf" の編集も必要です: `` -# Emperor uWSGI script +# Emperor uWSGI script description "uWSGI Emperor" start on runlevel [2345] stop on runlevel [06] @@ -581,7 +581,7 @@ exec uwsgi --master --die-on-term --emperor /etc/uwsgi --logto /var/log/uwsgi/uw `` start uwsgi-emperor -/etc/init.d/nginx restart +/etc/init.d/nginx restart ``:code 次のコマンドで、uwsgiをリロードできます。 @@ -799,7 +799,7 @@ sudo nano /etc/postgresql/9.1/main/postgresql.conf そして、次の二行を記述します。 `` ... -listen_addresses = 'localhost' +listen_addresses = 'localhost' ... track_counts = on ... @@ -1330,7 +1330,7 @@ cache.memcache = MemcacheClient(request, memcache_servers) cache.ram = cache.disk = cache.memcache ``:code -最初の行はmemcacheをインポートします。2行目はmemcache socket(サーバー:ポート)のリストです。3行目はcache.memcacheを定義します。4行目は ``cache.ram`` と +最初の行はmemcacheをインポートします。2行目はmemcache socket(サーバー:ポート)のリストです。3行目はcache.memcacheを定義します。4行目は ``cache.ram`` と Memcacheオブジェクトを指している全く新しいキャッシュオブジェクトを定義するために、それらの一つだけを再定義するために選択することができます。 @@ -1799,7 +1799,7 @@ id = db.table.insert(field1=value1, field2=value2) 下記のような効果があります: - 新規行が、``db.table`` に挿入されます。行はweb2pyによって値が割り当てられる、``id`` を持ちます。行はDetastore主キーを持ちますが、しかしこの主キーは、``id`` では ''なく''、そして公開もされません。 -- ``db.table`` のインデックスは更新されます。特に、``id`` のインデックスが更新され、新規行は ''最終的に'' ``db.table.id`` でクエリすることが可能になります。 +- ``db.table`` のインデックスは更新されます。特に、``id`` のインデックスが更新され、新規行は ''最終的に'' ``db.table.id`` でクエリすることが可能になります。 この2つのステップが完了した後のみ、新規データの ``id`` によるクエリが可能になります。 とりわけ、下のようなweb2pyで通常使われる模範例は ''フェイル'' します: diff --git a/sources/34-web2py-italian-translation-in-progress/13.markmin b/sources/34-web2py-italian-translation-in-progress/13.markmin index 061cbc60..bf56ef74 100644 --- a/sources/34-web2py-italian-translation-in-progress/13.markmin +++ b/sources/34-web2py-italian-translation-in-progress/13.markmin @@ -83,13 +83,13 @@ Here are some steps to install apache+python+mod_wsgi+web2py+postgresql from scr On Ubuntu: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-ubuntu.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-ubuntu.sh chmod +x setup-web2py-ubuntu.sh sudo ./setup-web2py-ubuntu.sh `` On Fedora: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-fedora.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-fedora.sh chmod +x setup-web2py-fedora.sh sudo ./setup-web2py-fedora.sh `` diff --git a/sources/35-web2py-chinese-work-in-progress/13.markmin b/sources/35-web2py-chinese-work-in-progress/13.markmin index 061cbc60..bf56ef74 100644 --- a/sources/35-web2py-chinese-work-in-progress/13.markmin +++ b/sources/35-web2py-chinese-work-in-progress/13.markmin @@ -83,13 +83,13 @@ Here are some steps to install apache+python+mod_wsgi+web2py+postgresql from scr On Ubuntu: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-ubuntu.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-ubuntu.sh chmod +x setup-web2py-ubuntu.sh sudo ./setup-web2py-ubuntu.sh `` On Fedora: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-fedora.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-fedora.sh chmod +x setup-web2py-fedora.sh sudo ./setup-web2py-fedora.sh `` diff --git a/sources/36-web2py-spanish-translation-in-progress/13.markmin b/sources/36-web2py-spanish-translation-in-progress/13.markmin index be5964d9..78e4bc6d 100644 --- a/sources/36-web2py-spanish-translation-in-progress/13.markmin +++ b/sources/36-web2py-spanish-translation-in-progress/13.markmin @@ -88,14 +88,14 @@ Aquí presentamos instrucciones para instalar apache+python+mod_wsgi+web2py+post En Ubuntu: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-ubuntu.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-ubuntu.sh chmod +x setup-web2py-ubuntu.sh sudo ./setup-web2py-ubuntu.sh `` En Fedora: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-fedora.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-fedora.sh chmod +x setup-web2py-fedora.sh sudo ./setup-web2py-fedora.sh `` @@ -545,9 +545,9 @@ server { uwsgi_param UWSGI_SCHEME $scheme; uwsgi_param SERVER_SOFTWARE nginx/$nginx_version; } - + } -``:code +``:code Necesitarás crear un symlink del archivo y eliminar default @@ -564,15 +564,15 @@ cp web2py.key /etc/nginx/ssl cp web2py.crt /etc/nginx/ssl ``:code -Luego debes instalar y configurar uWSGI - +Luego debes instalar y configurar uWSGI + `` sudo mkdir /etc/uwsgi sudo mkdir /var/log/uwsgi ``:code Y crear el archivo de configuración "/etc/uwsgi/web2py.xml": - + `` /tmp/web2py.socket @@ -612,7 +612,7 @@ Por último reinicia todo: `` start uwsgi-emperor -/etc/init.d/nginx restart +/etc/init.d/nginx restart ``:code Puedes volver a cargar uwsgi con @@ -850,7 +850,7 @@ sudo nano /etc/postgresql/9.1/main/postgresql.conf y asegúrate de que contenga estas dos líneas `` ... -listen_addresses = 'localhost' +listen_addresses = 'localhost' ... track_counts = on ... @@ -1103,7 +1103,7 @@ El comando para iniciar el planificador es ''pythonw.exe -K '' Utilizamos nssm para envolver este comando, convirtiéndolo en un servicio. Antes de hacer esto, debes elegir el nombre del servicio. Existen claras razones para crear un servicio específico para cada app que requiera un scheduler. -Por lo tanto, la convención para el uso de nombres que utilices podría ser web2py_scheduler_app1 +Por lo tanto, la convención para el uso de nombres que utilices podría ser web2py_scheduler_app1 Luego de extraer el archivo zip, abre una consola del intérprete de comandos de Windows en la carpeta que contiene la versión para la arquitectura de tu sistema, y escribe @@ -1419,7 +1419,7 @@ Con este ajuste, ya no se necesita que la carpeta "errors" esté compartida, ya #### Memcache ``memcache``:inxx -Hemos mostrado que web2py provee de dos tipos de caché:``cache.ram`` y ``cache.disk``. +Hemos mostrado que web2py provee de dos tipos de caché:``cache.ram`` y ``cache.disk``. Los dos tipos de caché funcionan en un ambiente distribuido con múltiples servidores simultáneos, pero no funcionan como se esperaría. En particular, ``cache.ram`` solo hará caché en el nivel del servidor; esto hace que pierda su utilidad. ``cache.disk`` también hará el caché en el nivel del servidor a menos que la carpeta "cache" sea una carpeta compartida son soporte para bloqueo o ''locking''; por lo tanto, en lugar de hacer el sistema más eficiente, se convierte en un importante cuello de botella. @@ -1436,7 +1436,7 @@ cache.ram = cache.disk = cache.memcache La primera línea importa memcache. La segunda línea tiene que ser una lista de socket memcache (servidor:puerto). La tercer línea define ``cache.memcache``. La cuarta línea redefine ``cache.ram`` y ``cache.disk`` en función de memcache. -Podrías optar por redefinir solo uno de ellos para definir un objeto cache totalmente nuevo asociado al objeto Memcache. +Podrías optar por redefinir solo uno de ellos para definir un objeto cache totalmente nuevo asociado al objeto Memcache. Con este ajuste ya no será necesario compartir la carpeta "cache", ya que no se volverá a utilizar. @@ -1619,7 +1619,7 @@ Agradecemos al equipo de PythonAnywhere por su ayuda y apoyo. ### Despliegue en Heroku ``heroku``:cite ``Heroku``:inxx -Heroku es una solución en alojamiento multiplataforma moderna y ágil. Permite aplicar cambios a tus aplicaciones en a una nube de servidores usando Git. Para poder usar Heroku debes tener Git instalado y además debes tener el SDK Heroku instalado. La interacción con Heroku es a través del SDK en forma local y los comandos se actualizan y ejecutan en el servidor. +Heroku es una solución en alojamiento multiplataforma moderna y ágil. Permite aplicar cambios a tus aplicaciones en a una nube de servidores usando Git. Para poder usar Heroku debes tener Git instalado y además debes tener el SDK Heroku instalado. La interacción con Heroku es a través del SDK en forma local y los comandos se actualizan y ejecutan en el servidor. Las aplicaciones que corren sobre Heroku no pueden depender de un sistema de archivos permanente ya que se actualiza en forma periódica. Por esta razón sólo se debe almacenar el código de la aplicación en el sistema de archivos. Todo dato debe ser almacenado en la base de datos. Heroku depende de PostgreSQL. Igualmente, PostgreSQL también se configura usando el SDK de Heroku y la URI para la base de datos se asigna en forma dinámica en tiempo de ejecución y se almacena en una variable de entorno. @@ -1646,7 +1646,7 @@ Si no se corre la plataforma Heroku, ``get_db`` usará una base de datos de desa En ambos casos las sesiones se almacenarán en la base de datos. -Web2py provee de un script "scripts/setup-web2py-heroku.py" para desplegar tu instalación en Heroku. El script ejecuta los siguientes pasos: +Web2py provee de un script "scripts/setup-web2py-heroku.py" para desplegar tu instalación en Heroku. El script ejecuta los siguientes pasos: Instala virtualenv y el controlador psycopg2: diff --git a/sources/37-web2py-portuguese-work-in-progress/13.markmin b/sources/37-web2py-portuguese-work-in-progress/13.markmin index 94cc5bbd..cb406768 100644 --- a/sources/37-web2py-portuguese-work-in-progress/13.markmin +++ b/sources/37-web2py-portuguese-work-in-progress/13.markmin @@ -85,13 +85,13 @@ Here are some steps to install apache+python+mod_wsgi+web2py+postgresql from scr On Ubuntu: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-ubuntu.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-ubuntu.sh chmod +x setup-web2py-ubuntu.sh sudo ./setup-web2py-ubuntu.sh `` On Fedora: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-fedora.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-fedora.sh chmod +x setup-web2py-fedora.sh sudo ./setup-web2py-fedora.sh `` @@ -482,7 +482,7 @@ Nginx is more than an HTTP server and reverse proxy, it is also an IMAP/POP3 pro Nginx is easy to configure and its configuration files and simpler and more compact than the corresponding Apache ones. -Nginx does not support WSGI but provides native support for the uWSGI ``uwsgi``:cite protocol.``uwsgi``:inxx +Nginx does not support WSGI but provides native support for the uWSGI ``uwsgi``:cite protocol.``uwsgi``:inxx On Ubuntu you can install Nginx with: `` @@ -532,9 +532,9 @@ server { uwsgi_param UWSGI_SCHEME $scheme; uwsgi_param SERVER_SOFTWARE nginx/$nginx_version; } - + } -``:code +``:code You will need to symlink the file and remove the default @@ -549,16 +549,16 @@ mkdir /etc/nginx/ssl cp web2py.key /etc/nginx/ssl cp web2py.crt /etc/nginx/ssl ``:code - -You then need to install and setup uWSGI - + +You then need to install and setup uWSGI + `` sudo mkdir /etc/uwsgi sudo mkdir /var/log/uwsgi ``:code And create a configuration file "/etc/uwsgi/web2py.xml": - + `` /tmp/web2py.socket @@ -582,10 +582,10 @@ And create a configuration file "/etc/uwsgi/web2py.xml": This file assumes web2py is installed under "/home/www-data/web2py", as in the Aapache case. -You also need to edit a second configuration file "/etc/init/uwsgi-emperor.conf": +You also need to edit a second configuration file "/etc/init/uwsgi-emperor.conf": `` -# Emperor uWSGI script +# Emperor uWSGI script description "uWSGI Emperor" start on runlevel [2345] stop on runlevel [06] @@ -597,7 +597,7 @@ Finally restart everything: `` start uwsgi-emperor -/etc/init.d/nginx restart +/etc/init.d/nginx restart ``:code You can reload uwsgi with @@ -1153,7 +1153,7 @@ session.forget() Sessions are automatically forgotten is unchanged. -With sessions in database, "sessions" folder does not need to be a shared folder because it will no longer be accessed. +With sessions in database, "sessions" folder does not need to be a shared folder because it will no longer be accessed. ------- Notice that, if sessions are disabled, you must not pass the ``session`` to ``form.accepts`` and you cannot use ``session.flash`` nor CRUD. @@ -1451,11 +1451,11 @@ You just need to let your webserver know when to send those files ``apache-conte PythonAnywhere is the simplest way to deploy web2py applications. -PythonAnywhere is a Python development and hosting environment that displays in your web browser and runs on cloud servers. They are already set up with everything you need to run Python -and they support web2py specifically. In our experience PythonAnywhere is easy to use, fast, and powerful. They also provide MySQL databases, python shells and Dropbox integration. +PythonAnywhere is a Python development and hosting environment that displays in your web browser and runs on cloud servers. They are already set up with everything you need to run Python +and they support web2py specifically. In our experience PythonAnywhere is easy to use, fast, and powerful. They also provide MySQL databases, python shells and Dropbox integration. Professional hosting is available if the free basic one is not enough for you. -In order to use PythonAnywhere you need to create an account, login, then use the provided web Dashboard to add a new Web App of type web2py. +In order to use PythonAnywhere you need to create an account, login, then use the provided web Dashboard to add a new Web App of type web2py. [[image @///image/pythonanywhere1.png center 300px]] [[image @///image/pythonanywhere1.png center 300px]] diff --git a/sources/38-web2py-french-translation-in-progress/13.markmin b/sources/38-web2py-french-translation-in-progress/13.markmin index ce06a638..8a5687dc 100644 --- a/sources/38-web2py-french-translation-in-progress/13.markmin +++ b/sources/38-web2py-french-translation-in-progress/13.markmin @@ -82,13 +82,13 @@ Voici les quelques étapes à suivre pour installer apache+python+mod_wsgi+web2p Sur Ubuntu : `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-ubuntu.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-ubuntu.sh chmod +x setup-web2py-ubuntu.sh sudo ./setup-web2py-ubuntu.sh `` Sur Fedora : `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-fedora.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-fedora.sh chmod +x setup-web2py-fedora.sh sudo ./setup-web2py-fedora.sh `` @@ -176,7 +176,7 @@ et incluez le code suivant : Order Allow,Deny Deny from all - Allow from all + Allow from all @@ -457,7 +457,7 @@ Nginx est plus qu'un serveur HTTP et un reverse proxy, c'est aussi un serveur pr Nginx est facile à configurer et ses fichiers de configuration sont plus simples et plus compacts que ceux d'Apache. -Nginx ne supporte pas WSGI mais fournit un support natif pour le protocole uWSGI ``uwsgi``:cite protocol.``uwsgi``:inxx +Nginx ne supporte pas WSGI mais fournit un support natif pour le protocole uWSGI ``uwsgi``:cite protocol.``uwsgi``:inxx Sur Ubuntu, vous pouvez installer Nginx avec : `` @@ -507,9 +507,9 @@ server { uwsgi_param UWSGI_SCHEME $scheme; uwsgi_param SERVER_SOFTWARE nginx/$nginx_version; } - + } -``:code +``:code Vous aurez besoin de lier symboliquement le fichier et supprimer celui par défaut @@ -524,16 +524,16 @@ mkdir /etc/nginx/ssl cp web2py.key /etc/nginx/ssl cp web2py.crt /etc/nginx/ssl ``:code - + Vous aurez ensuite besoin d'installer et configurer uWSGI - + `` sudo mkdir /etc/uwsgi sudo mkdir /var/log/uwsgi ``:code et créé un fichier de configuration "/etc/uswsgi/web2py.xml" : - + `` /tmp/web2py.socket @@ -557,10 +557,10 @@ et créé un fichier de configuration "/etc/uswsgi/web2py.xml" : Ce fichier suppose que web2py est installé sous "/home/www-data/web2py", comme dans le cas d'Apache. -Vous avez aussi besoin d'éditer un second fichier de configuration "/etc/init/uwsgi-emperor.conf" : +Vous avez aussi besoin d'éditer un second fichier de configuration "/etc/init/uwsgi-emperor.conf" : `` -# Emperor uWSGI script +# Emperor uWSGI script description "uWSGI Emperor" start on runlevel [2345] stop on runlevel [06] @@ -572,10 +572,10 @@ Redémarrez finalement le tout : `` start uwsgi-emperor -/etc/init.d/nginx restart +/etc/init.d/nginx restart ``:code -Vous pouvez recharger uwsgi avec +Vous pouvez recharger uwsgi avec `` restart uwsgi-emperor ``:code @@ -792,7 +792,7 @@ sudo nano /etc/postgresql/9.1/main/postgresql.conf et assurez-vous qu'il contient ces lignes `` ... -listen_addresses = 'localhost' +listen_addresses = 'localhost' ... track_counts = on ... @@ -829,7 +829,7 @@ Les logs PostgreSQL sont dans : /var/log/postgresql/ ``:code -Une fois le serveur de base de données démarré et prêt, créez un utilisateur et une base de données afin que les applications web2py puissent l'utiliser : +Une fois le serveur de base de données démarré et prêt, créez un utilisateur et une base de données afin que les applications web2py puissent l'utiliser : `` sudo -u postgres createuser -PE -s myuser postgresql> createdb -O myuser -E UTF8 mydb @@ -943,7 +943,7 @@ NameVirtualHost *:443 Sauvez et vérifiez la configuration en utilisant : [Démarrer > Programmes > Apache HTTP Server 2.2 > Configure Apache Server > Test Configuration] -S'il n'y a pas de problème vous verrez une fenêtre de commande s'ouvrir et se fermer. +S'il n'y a pas de problème vous verrez une fenêtre de commande s'ouvrir et se fermer. Maintenant vous pouvez démarrer Apache : [Démarrer > Programmes > Apache HTTP Server 2.2 > Control Apache Server > Start] @@ -973,7 +973,7 @@ La méthode nssm n'utilise pas le fichier options.py de l'ancienne méthode. Au Démarrer l'ordonnanceur comme service Windows prend beaucoup de sens. L'approche la plus simple est de télécharger nssm (depuis http://www.nssm.cc). nssm est un helper open-source d'ordonnancement. -Il embarque une commande exécutable pour le rendre en tant que service. +Il embarque une commande exécutable pour le rendre en tant que service. La commande pour démarrer l'ordonnanceur est ''pythonw.exe -K '' Nous utilisons nssm pour embarquer cela, et en faire un service. Avant de faire cela, vous avez besoin de choisir un nom pour votre service. @@ -1316,7 +1316,7 @@ Nous pouvons aussi obtenir des statistiques Redis en appelant : `` cache.redis.stats() ``:code -Le sous-système de cache Redis vous permet d'éviter le fameux "thundering herd problem" : ce n'est pas actif par défaut puisqu'habituellement Redis est choisi pour sa vitesse, mais à un coût négligeable vous pouvez vous assurer que seul un thread/process peut définir une valeur de manière concurrente. Pour activer ce comportement, passez uniquement le paramètre ``with_lock=True`` à l'appel ``RedisCache``. +Le sous-système de cache Redis vous permet d'éviter le fameux "thundering herd problem" : ce n'est pas actif par défaut puisqu'habituellement Redis est choisi pour sa vitesse, mais à un coût négligeable vous pouvez vous assurer que seul un thread/process peut définir une valeur de manière concurrente. Pour activer ce comportement, passez uniquement le paramètre ``with_lock=True`` à l'appel ``RedisCache``. Vous pouvez également activer ce comportement "sur-demande" avec ``value = cache.redis('mykey', lambda: time.time(), with_lock=True)`` #### Sessions dans Redis @@ -1564,7 +1564,7 @@ Mais aussi quelques désavantages : Alors que Google Cloud SQL est une base de données MySQL habituelle, Google Datastore a quelques désavantages spécifiques : - Pas de transactions typiques ; ''eventual_consistency'' plutôt qu'une consistance forte pour les requêtes. -- Pas de requêtes complexes au datastore. En particulier, il n'y a pas d'opérateur ``JOIN``, ``LIKE``, et ``DATE/DATETIME``. +- Pas de requêtes complexes au datastore. En particulier, il n'y a pas d'opérateur ``JOIN``, ``LIKE``, et ``DATE/DATETIME``. - Pas de sous-requêtes multiples ``OR`` à moins qu'elles n'utilisent un seul et même champ. Nous fournissons ici une vue rapide de GAE en nous axant sur les problèmes spécifiques à web2py, nous vous invitons à aller voir la documentation officielle en ligne de GAE pour de plus amples détails. @@ -1813,7 +1813,7 @@ Utiliser une version de code (e.g. version1) pour le site visible par les utilis ``:code La clause ``login: admin`` assure que seuls les admins puissent utiliser la version 2. -Dans la chaîne de connexion à la base de données, spécifiez ``migrate_enabled=False``. +Dans la chaîne de connexion à la base de données, spécifiez ``migrate_enabled=False``. Pour effectuer une migration, il est mieux de désactiver l'accès concurrent à la base de données pour la migration. Procédez comme suit : - Ajoutez un fichier nommé ``DISABLED`` au répertoire le plus haut de la verison 1 de l'application (le répertoire parent des répertoires ``/controllers``, ``/views``, etc.), et uploadez la nouvelle version vers GAE. Ceci désactivera la version 1, et affichera un message ''"Le site est temporairement coupé pour maintenance"''. diff --git a/sources/40-web2py-czech-translation-in-progress/13.markmin b/sources/40-web2py-czech-translation-in-progress/13.markmin index 38a65a46..291bea43 100644 --- a/sources/40-web2py-czech-translation-in-progress/13.markmin +++ b/sources/40-web2py-czech-translation-in-progress/13.markmin @@ -86,13 +86,13 @@ Here are some steps to install apache+python+mod_wsgi+web2py+postgresql from scr On Ubuntu: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-ubuntu.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-ubuntu.sh chmod +x setup-web2py-ubuntu.sh sudo ./setup-web2py-ubuntu.sh `` On Fedora: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-fedora.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-fedora.sh chmod +x setup-web2py-fedora.sh sudo ./setup-web2py-fedora.sh `` @@ -180,7 +180,7 @@ and include the following code: Order Allow,Deny Deny from all - Allow from all + Allow from all @@ -492,7 +492,7 @@ Nginx is more than an HTTP server and reverse proxy, it is also an IMAP/POP3 pro Nginx is easy to configure and its configuration files and simpler and more compact than the corresponding Apache ones. -Nginx does not support WSGI but provides native support for the uWSGI ``uwsgi``:cite protocol.``uwsgi``:inxx +Nginx does not support WSGI but provides native support for the uWSGI ``uwsgi``:cite protocol.``uwsgi``:inxx On Ubuntu you can install Nginx with: `` @@ -542,9 +542,9 @@ server { uwsgi_param UWSGI_SCHEME $scheme; uwsgi_param SERVER_SOFTWARE nginx/$nginx_version; } - + } -``:code +``:code You will need to symlink the file and remove the default @@ -559,16 +559,16 @@ mkdir /etc/nginx/ssl cp web2py.key /etc/nginx/ssl cp web2py.crt /etc/nginx/ssl ``:code - -You then need to install and setup uWSGI - + +You then need to install and setup uWSGI + `` sudo mkdir /etc/uwsgi sudo mkdir /var/log/uwsgi ``:code And create a configuration file "/etc/uwsgi/web2py.xml": - + `` /tmp/web2py.socket @@ -592,10 +592,10 @@ And create a configuration file "/etc/uwsgi/web2py.xml": This file assumes web2py is installed under "/home/www-data/web2py", as in the Apache case. -You also need to edit a second configuration file "/etc/init/uwsgi-emperor.conf": +You also need to edit a second configuration file "/etc/init/uwsgi-emperor.conf": `` -# Emperor uWSGI script +# Emperor uWSGI script description "uWSGI Emperor" start on runlevel [2345] stop on runlevel [06] @@ -607,7 +607,7 @@ Finally restart everything: `` start uwsgi-emperor -/etc/init.d/nginx restart +/etc/init.d/nginx restart ``:code You can reload uwsgi with @@ -826,7 +826,7 @@ sudo nano /etc/postgresql/9.1/main/postgresql.conf and make sure it contains these two lines `` ... -listen_addresses = 'localhost' +listen_addresses = 'localhost' ... track_counts = on ... @@ -910,7 +910,7 @@ sudo status web2py-scheduler If you don't need to run Apache for some other application on the server, on modern Windows Servers installing web2py behind IIS is easier (and more performant). The following steps explain how to setup IIS in order to serve web2py: Windows Server 2008R2 or higher is needed. We'll start from the assumption that you're running 2012R2. The terms used for 2008R2 are slightly different but it shouldn't be a problem to reconcile the instructions. -Of course the requirements are a Python installed on the server and you being able to run web2py with something like +Of course the requirements are a Python installed on the server and you being able to run web2py with something like `` python web2py.py -a 'yourpassword' @@ -922,7 +922,7 @@ In order to serve static files with IIS, we need also the **Url Rewrite** module To let IIS "speak" with python, we need to install the wfastcgi module from [[here http://pytools.codeplex.com/releases]] . This will install a little script, wfasctgi.py, that is the handler the IIS will use to communicate with Python. -Now, open the **Internet Information Services (IIS) Manager** and click on the node representing the server. +Now, open the **Internet Information Services (IIS) Manager** and click on the node representing the server. We need to create a **FastCGI** process that will be mapped to the handler running web2py. @@ -931,13 +931,13 @@ Click on the **FastCGI Settings** box, and then to "Add Application": the "full From 2.10.4, web2py ships with a configuration file (web.config, inside the examples directory) that overrides the default handlers in order to work. The IIS configuration prohibits altering the handlers from a configuration file, but it's easy to disable the check: go to "Feature Delegation", find "Handler Mappings" and set it to Read/Write. Web2py needs also to be able to write files in his directory, so please make sure that the **IIS_IUSRS** group has read/write access to the folder where web2py is. -If you want to use web2py under the root of IIS, copy the source code under the root of IIS (that is usually C:\inetpub\wwwroot). Now, copy the web.config out of the examples directory and put it on the root folder, alongside web2py.py. You only need to replace **SCRIPT_PROCESSOR** (near the end of the file) to match the FastCGI application we created earlier: it has a funny syntax, but it needs to match the format **Full Path|Arguments** of the FastCGI application. +If you want to use web2py under the root of IIS, copy the source code under the root of IIS (that is usually C:\inetpub\wwwroot). Now, copy the web.config out of the examples directory and put it on the root folder, alongside web2py.py. You only need to replace **SCRIPT_PROCESSOR** (near the end of the file) to match the FastCGI application we created earlier: it has a funny syntax, but it needs to match the format **Full Path|Arguments** of the FastCGI application. If you have everything installed in the default paths, it needs to be something like **C:\Python27\python.exe|C:\Python27\Scripts\wfastcgi.py** This is sufficient to use web2py as the "root" application of a site. If instead you need to run web2py under a subfolder (let's say, "web2pyapps", so you can reach the welcome app at http://hostname/web2pyapps/welcome/ instead of the default http://hostname/welcome/), two additional steps are needed: - move the code to a subfolder named web2pyapps - - create a routes.py file with + - create a routes.py file with `` routers = dict(BASE=dict(path_prefix = "web2pyapps")) `` in it @@ -954,24 +954,24 @@ Instead, you download them from partner sites, such as [[ApacheHaus http://www.a The Apache site has a full list of such partners; search for Apache 2.4 windows binaries. However, the Windows binary may not come with the wsgi module. -In that case, visit [[the modwsgi home http://code.google.com/p/modwsgi/wiki/InstallationOnWindows]] (currently at http://code.google.com/p/modwsgi/) and download the precompiled binary for your version of python and Apache. After you install Apache, put the .so library in the modules directory. +In that case, visit [[the modwsgi home http://code.google.com/p/modwsgi/wiki/InstallationOnWindows]] (currently at http://code.google.com/p/modwsgi/) and download the precompiled binary for your version of python and Apache. After you install Apache, put the .so library in the modules directory. You'll need to modify httpd.conf to load the wsgi module; follow the example of other module load config lines. `` LoadModule wsgi_module modules/mod_wsgi.so ``:code -The modwsgi wiki mentions Windows specifics: recommended reading. +The modwsgi wiki mentions Windows specifics: recommended reading. You will need to setup httpd.conf as per any new Apache installation. Certificate installation is the same for Windows as under Linux. -The Windows binary is most likely configured to load and configure the SSL modules 'out of the box' (the Apache Haus binary is like this). +The Windows binary is most likely configured to load and configure the SSL modules 'out of the box' (the Apache Haus binary is like this). web2py should be served on https and optionally on http. Typically this means port 80 and port 443 although your Windows server may be using these ports because IIS may be installed, in which case choose alternate ports. -However, we'll assume 80 and 443 for now. +However, we'll assume 80 and 443 for now. look for "Listen 80" and add this line after it `` Listen 443 @@ -1035,9 +1035,9 @@ What Linux calls a daemon, Windows calls a service. The web2py built-in rocket server can easily be installed/started/stopped as a Windows service. The same is true of the web2py scheduler. ``Windows services with nssm``:inxx -Rather than maintaining Windows service code in web2py.py, the developers support the external wrapper-tool 'nssm'. +Rather than maintaining Windows service code in web2py.py, the developers support the external wrapper-tool 'nssm'. -nssm is a well respected Windows tool with good features, such as automatic restart of services. It also means a consistent way of running web2py services, scheduler services and clean-up processes like session deletes. The use of the previous -W command-line option is no longer supported. +nssm is a well respected Windows tool with good features, such as automatic restart of services. It also means a consistent way of running web2py services, scheduler services and clean-up processes like session deletes. The use of the previous -W command-line option is no longer supported. The nssm method does not use the options.py file of the old method. Instead, options are passed on the command line (some exmaples are provided below) ##### nssm recipe: running the scheduler as a Windows service with nssm @@ -1066,7 +1066,7 @@ It is possible to invoke the scheduler with multiple applications. However, in t Therefore, the process started by the service will not die if one of the scheduler instances runs into problems; rather, that child process would die. We then can't take advantage of Windows automatic service restart in case of failure. Using one app per service enables this feature. -##### nssm recipe: running web2py.py as a service +##### nssm recipe: running web2py.py as a service The example above shows how to use nssm. To run web2py in SSL mode on port 8041, and including some other options, you could give nssm a command line (in the options field of the nssm dialog) like this: @@ -1180,7 +1180,7 @@ session.forget() Sessions are automatically forgotten is unchanged. -With sessions in database, "sessions" folder does not need to be a shared folder because it will no longer be accessed. +With sessions in database, "sessions" folder does not need to be a shared folder because it will no longer be accessed. ------- Notice that, if sessions are disabled, you must not pass the ``session`` to ``form.accepts`` and you cannot use ``session.flash`` nor CRUD. @@ -1415,7 +1415,7 @@ sessions generated (so for 1000 sessions, 1002 keys). If ``session_expiry`` is not set, sessions will be handled as usual, you'd need to [[cleanup sessions as usual @///chapter/13#Cleaning-up-sessions]] once a while. However, when ``session_expiry`` is set will delete automatically sessions after n seconds -(e.g. if set to 3600, session will expire exactly one hour later having been updated the last time), +(e.g. if set to 3600, session will expire exactly one hour later having been updated the last time), you should occasionally run sessions2trash.py just to clean the key holding the set of all the sessions previously issued (for ~1M sessions, cleaning up requires 3 seconds) The redis backend for sessions is the only one that can prevent concurrent modifications to the same session: this is especially true @@ -1490,11 +1490,11 @@ You just need to let your webserver know when to send those files ``apache-conte PythonAnywhere is the simplest way to deploy web2py applications. -PythonAnywhere is a Python development and hosting environment that displays in your web browser and runs on cloud servers. They are already set up with everything you need to run Python -and they support web2py specifically. In our experience PythonAnywhere is easy to use, fast, and powerful. They also provide MySQL databases, python shells and Dropbox integration. +PythonAnywhere is a Python development and hosting environment that displays in your web browser and runs on cloud servers. They are already set up with everything you need to run Python +and they support web2py specifically. In our experience PythonAnywhere is easy to use, fast, and powerful. They also provide MySQL databases, python shells and Dropbox integration. Professional hosting is available if the free basic one is not enough for you. -In order to use PythonAnywhere you need to create an account, login, then use the provided web Dashboard to add a new Web App of type web2py. +In order to use PythonAnywhere you need to create an account, login, then use the provided web Dashboard to add a new Web App of type web2py. [[image @///image/pythonanywhere1.png center 300px]] [[image @///image/pythonanywhere2.png center 300px]] @@ -1827,13 +1827,13 @@ Notice that on GAE cache.ram and cache.disk should not be used, so we make them #### Datastore issues -While the Google Clould SQL functions as a regular SQL database, and is indeed based at the time of writing on mysql, Google Datastore presents significant differences. +While the Google Clould SQL functions as a regular SQL database, and is indeed based at the time of writing on mysql, Google Datastore presents significant differences. ##### Eventual consistency -The ''eventual consistency'' offered by Google Datastore deserves special attention. +The ''eventual consistency'' offered by Google Datastore deserves special attention. In the Datastore, transactions that rely on primary Datastore keys, or a shared entity group, offer a strong consistency: every subsequent transaction or query will see the result of any prior transaction for the same key or entity group. -On the other hand, queries that do not rely on primary keys or shared entity groups offer only ''eventual consistency'': new or modified data will be eventually made available to queries, after an unspecified delay that is typically up to a few seconds. +On the other hand, queries that do not rely on primary keys or shared entity groups offer only ''eventual consistency'': new or modified data will be eventually made available to queries, after an unspecified delay that is typically up to a few seconds. web2py does not rely on primary Datastore keys, nor shared entity groups. The statement: @@ -1843,8 +1843,8 @@ id = db.table.insert(field1=value1, field2=value2) has the following effect: - A new row is inserted in the table ``db.table``; the row has a field ``id`` whose value is assigned by web2py. The row also has a primary Datastore key, but this primary key is ''not'' ``id``, and is not exposed. -- The indices on ``db.table`` are updated. In particular, the index over ``id`` is updated, so the new row is ''eventually'' available to queries over ``db.table.id``. -Only after these two steps terminate, is the new data available for queries by ``id``. +- The indices on ``db.table`` are updated. In particular, the index over ``id`` is updated, so the new row is ''eventually'' available to queries over ``db.table.id``. +Only after these two steps terminate, is the new data available for queries by ``id``. In particular, the following common web2py paradigm will ''fail'': `` @@ -1897,8 +1897,8 @@ Similarly, web2py supports ``list:integer`` and ``list:reference`` which map int #### Database migrations -A good practice for migrations using Google AppEngine is the following. -AppEngine supports multiple code versions. +A good practice for migrations using Google AppEngine is the following. +AppEngine supports multiple code versions. Use one code version (e.g., version 1) for the user-visible site, and another code version (e.g., version 2) for the admin code. In ``app.yaml`` for version 2, declare the handler as follows (assuming Python 2.7 is used): `` @@ -1909,10 +1909,10 @@ Use one code version (e.g., version 1) for the user-visible site, and another co ``:code The ``login: admin`` clause ensures that only admins can use version 2. -In the database connection string, specify ``migrate_enabled=False``. +In the database connection string, specify ``migrate_enabled=False``. To perform a migration, it is best to disable database access concurrent to the migration. Proceed as follows: -- Add a file named ``DISABLED`` to the top directory of your version 1 application (the parent directory of the ``/controllers``, ``/views``, etc. directories), and upload the new version to GAE. This will disable version 1, and display a message ''"The site is temporarily down for maintenance"''. +- Add a file named ``DISABLED`` to the top directory of your version 1 application (the parent directory of the ``/controllers``, ``/views``, etc. directories), and upload the new version to GAE. This will disable version 1, and display a message ''"The site is temporarily down for maintenance"''. - Upload to version 2 code with ``migrate_enabled=True`` in the db connection string, and visit it from an admin account, triggering the migration. - Upload to version 2 code with ``migrate_enabled=False``, to disable further migrations. - Remove the file named ``DISABLED`` from version 1, and upload the code to version 1. This makes the site again visible to all. diff --git a/sources/41-web2py-spanish-translation-in-progress/13.markmin b/sources/41-web2py-spanish-translation-in-progress/13.markmin index be5964d9..78e4bc6d 100644 --- a/sources/41-web2py-spanish-translation-in-progress/13.markmin +++ b/sources/41-web2py-spanish-translation-in-progress/13.markmin @@ -88,14 +88,14 @@ Aquí presentamos instrucciones para instalar apache+python+mod_wsgi+web2py+post En Ubuntu: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-ubuntu.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-ubuntu.sh chmod +x setup-web2py-ubuntu.sh sudo ./setup-web2py-ubuntu.sh `` En Fedora: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-fedora.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-fedora.sh chmod +x setup-web2py-fedora.sh sudo ./setup-web2py-fedora.sh `` @@ -545,9 +545,9 @@ server { uwsgi_param UWSGI_SCHEME $scheme; uwsgi_param SERVER_SOFTWARE nginx/$nginx_version; } - + } -``:code +``:code Necesitarás crear un symlink del archivo y eliminar default @@ -564,15 +564,15 @@ cp web2py.key /etc/nginx/ssl cp web2py.crt /etc/nginx/ssl ``:code -Luego debes instalar y configurar uWSGI - +Luego debes instalar y configurar uWSGI + `` sudo mkdir /etc/uwsgi sudo mkdir /var/log/uwsgi ``:code Y crear el archivo de configuración "/etc/uwsgi/web2py.xml": - + `` /tmp/web2py.socket @@ -612,7 +612,7 @@ Por último reinicia todo: `` start uwsgi-emperor -/etc/init.d/nginx restart +/etc/init.d/nginx restart ``:code Puedes volver a cargar uwsgi con @@ -850,7 +850,7 @@ sudo nano /etc/postgresql/9.1/main/postgresql.conf y asegúrate de que contenga estas dos líneas `` ... -listen_addresses = 'localhost' +listen_addresses = 'localhost' ... track_counts = on ... @@ -1103,7 +1103,7 @@ El comando para iniciar el planificador es ''pythonw.exe -K '' Utilizamos nssm para envolver este comando, convirtiéndolo en un servicio. Antes de hacer esto, debes elegir el nombre del servicio. Existen claras razones para crear un servicio específico para cada app que requiera un scheduler. -Por lo tanto, la convención para el uso de nombres que utilices podría ser web2py_scheduler_app1 +Por lo tanto, la convención para el uso de nombres que utilices podría ser web2py_scheduler_app1 Luego de extraer el archivo zip, abre una consola del intérprete de comandos de Windows en la carpeta que contiene la versión para la arquitectura de tu sistema, y escribe @@ -1419,7 +1419,7 @@ Con este ajuste, ya no se necesita que la carpeta "errors" esté compartida, ya #### Memcache ``memcache``:inxx -Hemos mostrado que web2py provee de dos tipos de caché:``cache.ram`` y ``cache.disk``. +Hemos mostrado que web2py provee de dos tipos de caché:``cache.ram`` y ``cache.disk``. Los dos tipos de caché funcionan en un ambiente distribuido con múltiples servidores simultáneos, pero no funcionan como se esperaría. En particular, ``cache.ram`` solo hará caché en el nivel del servidor; esto hace que pierda su utilidad. ``cache.disk`` también hará el caché en el nivel del servidor a menos que la carpeta "cache" sea una carpeta compartida son soporte para bloqueo o ''locking''; por lo tanto, en lugar de hacer el sistema más eficiente, se convierte en un importante cuello de botella. @@ -1436,7 +1436,7 @@ cache.ram = cache.disk = cache.memcache La primera línea importa memcache. La segunda línea tiene que ser una lista de socket memcache (servidor:puerto). La tercer línea define ``cache.memcache``. La cuarta línea redefine ``cache.ram`` y ``cache.disk`` en función de memcache. -Podrías optar por redefinir solo uno de ellos para definir un objeto cache totalmente nuevo asociado al objeto Memcache. +Podrías optar por redefinir solo uno de ellos para definir un objeto cache totalmente nuevo asociado al objeto Memcache. Con este ajuste ya no será necesario compartir la carpeta "cache", ya que no se volverá a utilizar. @@ -1619,7 +1619,7 @@ Agradecemos al equipo de PythonAnywhere por su ayuda y apoyo. ### Despliegue en Heroku ``heroku``:cite ``Heroku``:inxx -Heroku es una solución en alojamiento multiplataforma moderna y ágil. Permite aplicar cambios a tus aplicaciones en a una nube de servidores usando Git. Para poder usar Heroku debes tener Git instalado y además debes tener el SDK Heroku instalado. La interacción con Heroku es a través del SDK en forma local y los comandos se actualizan y ejecutan en el servidor. +Heroku es una solución en alojamiento multiplataforma moderna y ágil. Permite aplicar cambios a tus aplicaciones en a una nube de servidores usando Git. Para poder usar Heroku debes tener Git instalado y además debes tener el SDK Heroku instalado. La interacción con Heroku es a través del SDK en forma local y los comandos se actualizan y ejecutan en el servidor. Las aplicaciones que corren sobre Heroku no pueden depender de un sistema de archivos permanente ya que se actualiza en forma periódica. Por esta razón sólo se debe almacenar el código de la aplicación en el sistema de archivos. Todo dato debe ser almacenado en la base de datos. Heroku depende de PostgreSQL. Igualmente, PostgreSQL también se configura usando el SDK de Heroku y la URI para la base de datos se asigna en forma dinámica en tiempo de ejecución y se almacena en una variable de entorno. @@ -1646,7 +1646,7 @@ Si no se corre la plataforma Heroku, ``get_db`` usará una base de datos de desa En ambos casos las sesiones se almacenarán en la base de datos. -Web2py provee de un script "scripts/setup-web2py-heroku.py" para desplegar tu instalación en Heroku. El script ejecuta los siguientes pasos: +Web2py provee de un script "scripts/setup-web2py-heroku.py" para desplegar tu instalación en Heroku. El script ejecuta los siguientes pasos: Instala virtualenv y el controlador psycopg2: diff --git a/sources/42-web2py-polish-translation-in-progress/13.markmin b/sources/42-web2py-polish-translation-in-progress/13.markmin index f7e8eb21..b64452eb 100644 --- a/sources/42-web2py-polish-translation-in-progress/13.markmin +++ b/sources/42-web2py-polish-translation-in-progress/13.markmin @@ -146,13 +146,13 @@ Oto kilka kroków do zainstalowania od podstaw apache+python+mod_wsgi+web2py+pos Na Ubuntu: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-ubuntu.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-ubuntu.sh chmod +x setup-web2py-ubuntu.sh sudo ./setup-web2py-ubuntu.sh `` Na Fedora: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-fedora.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-fedora.sh chmod +x setup-web2py-fedora.sh sudo ./setup-web2py-fedora.sh `` @@ -253,7 +253,7 @@ i wstaw w nim następujący kod: Order Allow,Deny Deny from all - Allow from all + Allow from all @@ -606,7 +606,7 @@ serwer proxy IMAP/POP3. Nginx jest łatwiejszy w konfiguracji a jego pliki konfiguracyjne są prostsze i bardziej kompaktowe niż odpowiadające im pliki Apache. -Nginx nie obsługuje WSGI, ale dostarcza natywną obsługę protokołu uWSGI ``uwsgi``:cite.``uwsgi``:inxx +Nginx nie obsługuje WSGI, ale dostarcza natywną obsługę protokołu uWSGI ``uwsgi``:cite.``uwsgi``:inxx Na Ubuntu można zainstalować Nginx poleceniem: `` @@ -655,9 +655,9 @@ server { uwsgi_param UWSGI_SCHEME $scheme; uwsgi_param SERVER_SOFTWARE nginx/$nginx_version; } - + } -``:code +``:code Trzeba też stworzyć odwołanie symboliczne do pliku i usunąć odwołanie symboliczne do pliku ''default'': @@ -673,16 +673,16 @@ mkdir /etc/nginx/ssl cp web2py.key /etc/nginx/ssl cp web2py.crt /etc/nginx/ssl ``:code - -Następnie trzeba zainstalować i skonfigurować uWSGI: - + +Następnie trzeba zainstalować i skonfigurować uWSGI: + `` sudo mkdir /etc/uwsgi sudo mkdir /var/log/uwsgi ``:code oraz utworzyć plik kpnfiguracyjny "/etc/uwsgi/web2py.xml": - + `` /tmp/web2py.socket @@ -707,10 +707,10 @@ oraz utworzyć plik kpnfiguracyjny "/etc/uwsgi/web2py.xml": Zakładamy tu, że web2py jest zainstalowany w katalogu "/var/www/html/web2py", tak jak miało to miejsce w przypadku Apache. -Trzeba też edytować drugi plik konfiguracyjny "/etc/init/uwsgi-emperor.conf": +Trzeba też edytować drugi plik konfiguracyjny "/etc/init/uwsgi-emperor.conf": `` -# Emperor uWSGI script +# Emperor uWSGI script description "uWSGI Emperor" start on runlevel [2345] stop on runlevel [06] @@ -722,7 +722,7 @@ Na koniec zrestartuj wszystko: `` start uwsgi-emperor -/etc/init.d/nginx restart +/etc/init.d/nginx restart ``:code Można przeładować uwsgi poleceniem: @@ -823,7 +823,7 @@ gniazda IP. To lokalizacja gdzie Lighttpd przekazuje żądania HTTP i z której otrzymuje odpowiedzi. Gniazda Unix są lżejsze niż gniazda internetowe i dlatego Lighttpd+FastCGI+web2py jest szybszy. -Podobnie jak w przypadku Apache, jest możliwe skonfigurowanie Lighttpd do bezpośredniej +Podobnie jak w przypadku Apache, jest możliwe skonfigurowanie Lighttpd do bezpośredniej obsługi plików statycznych i wymuszania aolikacji poprzez HTTPS. Proszę zapoznać się z dokumentacją Lighttpd w celu poznania szczegółów. @@ -975,7 +975,7 @@ sudo nano /etc/postgresql/9.1/main/postgresql.conf i upewnić się, że zawiera on następujące linie kodu: `` ... -listen_addresses = 'localhost' +listen_addresses = 'localhost' ... track_counts = on ... @@ -1042,7 +1042,7 @@ W celu uzyskania informacji o wykonywaniu kopii zapasowych baz danych, proszę zapoznać się z dokumentacją PostgreSQL, w szczególności z poleceniami ``pg_dump`` i ``pg_restore``. -#### Uruchomienie schedulera jako demona Linux +#### Uruchomienie schedulera jako demona Linux W celu zainstalowania schedulera jako stałego demona Linux (z wykorzystaniem upstart), wstaw poniższy kod do /etc/init/web2py-scheduler.conf, zakładając, że instancja web2py jest zainstalowana w katalogu dokumentów serwera internetowego, uruchamiana @@ -1085,7 +1085,7 @@ Jednak binaria Windows nie zawierają mudułu WSGI. Proszę odwiedzić stronę [[modwsgi http://code.google.com/p/modwsgi/wiki/InstallationOnWindows]] (obecnie na http://code.google.com/p/modwsgi/) i pobrać wstępnie skompilowane binaria dla swojej wersji Pythona i Apache. Po zainstalowaniu Apache, trzeba umieścić -biblioteke .so w katalogu modułów. +biblioteke .so w katalogu modułów. W celu umożliwienia ładowania modułu WSGI trzeba zmodyfikować plik httpd.conf. Oto przykład: @@ -1093,21 +1093,21 @@ Oto przykład: LoadModule wsgi_module modules/mod_wsgi.so ``:code -Wiki modwsgi omawia specyfikację Windows - polecamy jej przeczytanie. +Wiki modwsgi omawia specyfikację Windows - polecamy jej przeczytanie. Plik httpd.conf musi zostać skonfigurowany jak przy każdej nowej instalacji Apache. Instalacja certyfikatów SSL jest taka sama dla Windows jak dla Linux. Pakiet binarny Windows jest najczęściej skonfigurowany do ładowania wstępnie -skonfigurowanych modułów SSL (pakiet Apache Haus właśnie takim jest). +skonfigurowanych modułów SSL (pakiet Apache Haus właśnie takim jest). Aplikacje web2py powinny być serwowane na protokole HTTPS, choć możliwe jest też opcjonalne skonfigurowanie HTTP. Zazwyczaj oznacza to port 80 i 443, ale porty te moga być zajęte, jeśli w systemie Windows działa też IIS - wówczas trzeba skonfigurować alternatywne porty. -W naszym przykładzie zakładamy wykorzystanie portów 80 i 443. +W naszym przykładzie zakładamy wykorzystanie portów 80 i 443. W pliku httpd.conf odszukaj linię z wpisem "Listen 80" i dodaj po niej: `` Listen 443 @@ -1175,12 +1175,12 @@ jako usługę Windows. Podobnie jest ze schedulerem web2py. ``usługi Windows z nssm``:inxx Zamiast utrzymywać w web2py.py kod usługi Windows, wspierane jest zewnętrzne -narzędzie opakowujące 'nssm'. +narzędzie opakowujące 'nssm'. Biblioteka nssm jest uznanym narzędziem z dobrymi możliwościami, takimi jak automatyczny restart usług. Jego stosowanie oznacza również spójny sposób uruchamiania usług web2py, usług schedulera i czyszczenia procesów, takiego jak usuwanie sesji. -Użycie opcji -W w poprzednio rozpatrywanym poleceniu jest nadal obsługiwane. +Użycie opcji -W w poprzednio rozpatrywanym poleceniu jest nadal obsługiwane. Metoda nssm nie używa pliku options.py starej metody. Zamiast tego opcje są przekazywane w poleceniu linii poleceń (trochę przykładów znajduje się poniżej) @@ -1387,7 +1387,7 @@ session.forget() Sesje, które są automatycznie zapominane, pozostaja bez zmian. Przy stosowaniu zapisu sesji w bazie danych, folder "sessions" nie musi być -udostępniany, ponieważ nie jest już wykorzystywany. +udostępniany, ponieważ nie jest już wykorzystywany. ------- Proszę zauważyć, że jeśli sesje są wyłączone, nie trzeba przekazywać ``session`` @@ -1791,12 +1791,12 @@ w przeglądarce internetowej i działa w chmurze serwerowej. Jest tma wszystko, jest potrzebne do uruchomienia Pythona i wspiera ono specjalnie platformę web2py. Z naszego doświadczenia wynika, że PythonAnywhere jest łatwy w użyciu, szybki i silny. Zapewnia również dostęp do baz danych MySQL, powłok Pythona i integrację -z Dropbox. +z Dropbox. Dostępny jest też profesjonalny hosting, jeśli darmowe konto podstawowe jest niewystarczające. W celu użycia PythonAnywhere utwórz konto, zaloguj się a następnie -wykorzystaj dostarczony panel do dodania nowej aplikacji internetowej typu web2py. +wykorzystaj dostarczony panel do dodania nowej aplikacji internetowej typu web2py. [[image @///image/pythonanywhere1.png center 300px]] [[image @///image/pythonanywhere2.png center 300px]] @@ -1926,7 +1926,7 @@ echo "web: python web2py.py -a 'yourpassword' -i 0.0.0.0 -p \$PORT" > Procfile ``:code Można zmienić tą linię, jeśli chce się korzystać z innego serwera. Trzeba ją -edytować, aby ustawić tam własne hasło administracyjne. Zmienna ``$PORT`` jest +edytować, aby ustawić tam własne hasło administracyjne. Zmienna ``$PORT`` jest tutaj poprzedzona znakiem ucieczki, ponieważ jej wartość jest ustalana w czasie wykonania. Trzeba również rozważyć uruchamianie web2py z "gunicorn" stosując ``anyserver.py``, ponieważ jest to jeden z serwerów internetowych zalecanych dla @@ -2219,16 +2219,16 @@ więc wskazaliśmy je jako cache.memcache. Podczas gdy Google Clould SQL funkcjonuje jak zwykła baza danych SQL i jest oparty na MySQL (w chwili pisania tego artykułu), to Google Datastore znacznie -się różni. +się różni. ##### Spójność końcowa --------- UWAGA: Przez **spójność końcową** rozumie się tu tzw. model spójność BASE (ang. ''Basically Available Soft State with Eventual cosnsistency''). ---------- +--------- -Oferowana przez Google Datastore ''spójność końcowa'' wymaga szczególnej uwagi. +Oferowana przez Google Datastore ''spójność końcowa'' wymaga szczególnej uwagi. W Datastore transakcje, które opierają sie na podstawowych kluczach Datastore lub na współdzielonych grupach encji, oferują ''spójność silną'': każda kolejna transakcja lub zapytanie będzie dawać ten sam wynik, co każda wcześniejsza transakcja @@ -2236,7 +2236,7 @@ dla tego samego klucza lub grupy encji. Z drugiej strony, zapytanie nie opierające się na kluczach podstawowych lun na współdzielonych pgrupach encji oferują tylko ''spójność końcową'': dane nowe lub zmienione będą ostatecznie dostępne dla zapytań, po bliżej nieokreślonym czasie, -który wynosi zazwyczaj kilka sekund. +który wynosi zazwyczaj kilka sekund. W web2py nie uzywa się transakcji opartych na podstawowych kluczach Datastore, ani na współdzielonych grupach encjach. Wyrażenie: @@ -2253,9 +2253,9 @@ daje następujący efekt: - Aktualizowane sa indeksy na ``db.table``. W szczegóności, aktualizowany jest indeks na polu ``id``, tak więc nowy wiersz jest ''ostatecznie'' dostępny dla zapytań dla ``db.table.id``. - + Dopiero po tych dwóch czynnościach nowe dane stają sie dostęþne dla zapytań -wykorzystujących pole ``id``. +wykorzystujących pole ``id``. W szczególności, poniższy wzorzec web2py niepowiedzie się: `` @@ -2322,8 +2322,8 @@ Typy ``list`` są omówione w rozdziale 6. #### Migracja bazy danych -Dobra praktyka przy migracji wykorzytującej Google AppEngine jest następująca. -AppEngine obsługuje wiele wersji kodu. +Dobra praktyka przy migracji wykorzytującej Google AppEngine jest następująca. +AppEngine obsługuje wiele wersji kodu. Użyj jednej wersji kodu (np. wersji 1) dla strony widocznej przez użytkownika i innej wersji (np. wersji 2) dla kodu admininistracyjnego. W ``app.yaml`` dla wersji 2, trzeba zadeklarować handler jak niżej (przy załozeniu używania Python 2.7): @@ -2336,13 +2336,13 @@ wersji 2, trzeba zadeklarować handler jak niżej (przy załozeniu używania Pyt ``:code Klauzula ``login: admin`` sprawia, że tylko administratorzy mogą korzystać z wersji 2. -W ciagu połaczenia z bazą danych, trzeba określić ``migrate_enabled=False``. +W ciagu połaczenia z bazą danych, trzeba określić ``migrate_enabled=False``. W celu przeprowadzenia migracji najlepiej jest wyłaczyć jednoczesny dostęp do migracji. Należy postępować w następujący sposób: - Dodać plik o nazwie ``DISABLED`` do głównego katalogu aplikacji wersji 1 (nadrzędny katalog dla katalogów ``/controllers``, ``/views`` itd.) i przesłać nową wersję do GAE. Wyłączy to wersję 1 i wyświetli komunikat ''"The site is - temporarily down for maintenance"''. + temporarily down for maintenance"''. - W ciągu połączenia db w kodzie wersji dodać ``migrate_enabled=True`` i odwiedzić ten adres z poziomu konta administracyjnego, wyzwalajac migrację. - Dodać do kodu wersji 2 wyrażenie ``migrate_enabled=False`` w celu wyłączenia diff --git a/sources/43-web2py-russian-translation-in-progress/13.markmin b/sources/43-web2py-russian-translation-in-progress/13.markmin index 9c381705..38335355 100644 --- a/sources/43-web2py-russian-translation-in-progress/13.markmin +++ b/sources/43-web2py-russian-translation-in-progress/13.markmin @@ -5,11 +5,11 @@ Окружающая среда между вашей разработкой и производственной системой почти наверняка означает другую конфигурацию базы данных, различные почтовые сервера и, возможно, другие отличия. -Web2py намерено использует частный каталог (private directory) для хранения информации, который не копируется при типичном развертывании производства (хотя вам нужно позаботиться в том, что убедиться, что вы не развернули этот каталог). +Web2py намерено использует частный каталог (private directory) для хранения информации, который не копируется при типичном развертывании производства (хотя вам нужно позаботиться в том, что убедиться, что вы не развернули этот каталог). Вспомогательный модуль ``AppConfig`` позволяет хранить в частном каталоге простой текстовый файл конфигурации для определения таких параметров, которые варьируются между разработкой и производством, как соединения с базой данных. По умолчанию это текстовый файл, который выполнен в питоновском стиле, но JSON также поддерживается. -Приложение welcome теперь использует этот модуль в ``db.py`` для чтения конфигурации из файла в частном каталоге приложения. По умолчанию путь к этому файлу +Приложение welcome теперь использует этот модуль в ``db.py`` для чтения конфигурации из файла в частном каталоге приложения. По умолчанию путь к этому файлу ``private/appconfig.ini`` По умолчанию, ``appconfig.ini`` позволяет определить соединение с базой данных и конфигурацию SMTP. Когда приложение является стабильным, то модуль может быть установлен в режиме кэширования, чтобы уменьшить накладные расходы. @@ -18,7 +18,7 @@ from gluon.contrib.appconfig import AppConfig ... myconf = AppConfig(reload=False)``:code -Приложения, созданные в последней версии web2py по умолчанию имеют соединение с базой данных, определенное в AppConfig. +Приложения, созданные в последней версии web2py по умолчанию имеют соединение с базой данных, определенное в AppConfig. Значения в app_config.ini вытаскиваются и отбираются из строкового значения примерно так: `` @@ -30,7 +30,7 @@ a_config_value = myconf.take('example_section.example_key',cast=int) Поскольку отбор происходит из строки, и не пустые строки отбираются как True, то самым безопасным способом представить логическое значение False является с пустой строкой: `` [example_section] -example_key = +example_key = ``:code ## Рецепты развертывания: Инфраструктура @@ -117,13 +117,13 @@ python anyserver.py -h На Ubuntu: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-ubuntu.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-ubuntu.sh chmod +x setup-web2py-ubuntu.sh sudo ./setup-web2py-ubuntu.sh `` На Fedora: `` -wget http://web2py.googlecode.com/hg/scripts/setup-web2py-fedora.sh +wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-fedora.sh chmod +x setup-web2py-fedora.sh sudo ./setup-web2py-fedora.sh `` @@ -211,7 +211,7 @@ sudo chown -R www-data:www-data /home/www-data/web2py Order Allow,Deny Deny from all - Allow from all + Allow from all @@ -248,15 +248,15 @@ sudo chown -R www-data:www-data /home/www-data/web2py WSGIDaemonProcess web2py user=www-data group=www-data display-name=%{GROUP} ``:code -определяет процесс-демон группы в контексте "web2py.example.com". За счет определения этой внутренней части виртуального хоста, только этот виртуальный хост может получить доступ с помощью WSGIProcessGroup, включая любой виртуальный хост с таким же именем сервера, но на другой порт. +определяет процесс-демон группы в контексте "web2py.example.com". За счет определения этой внутренней части виртуального хоста, только этот виртуальный хост может получить доступ с помощью WSGIProcessGroup, включая любой виртуальный хост с таким же именем сервера, но на другой порт. -Опции "user" и "group" должны быть установлены для пользователя, который имеет доступ на запись в каталог,  где был установлен web2py. Вам не нужно задавать "user" и "group", если вы сделали свой каталог установки web2py доступным для записи пользователем по умолчанию, который запускает Apache. +Опции "user" и "group" должны быть установлены для пользователя, который имеет доступ на запись в каталог,  где был установлен web2py. Вам не нужно задавать "user" и "group", если вы сделали свой каталог установки web2py доступным для записи пользователем по умолчанию, который запускает Apache. Опция "display-name" отображает имя процесса в ``ps`` выходе как "(WSGI-web2py)", а не как имя исполняемого файла веб-сервера Apache. Поскольку нет задаваемых опций "processes" или "threads", то группа демон-процессов будет иметь единственный процесс с 15 потоками, выполняемых в рамках этого процесса. -Это, как правило, более чем достаточно для большинства сайтов и следует оставить как есть. Если переопределяете их, то не используйте "processes=1", так как это приведет к отключению любых отладочных WSGI инструментов в браузере, которые проверяют флаг "wsgi.multiprocess". Это происходит потому, что любое использование опции "processes" приведет к тому, что флаг будет установлен в положение истина, даже для одного процесса, и такие инструменты ожидают, что они будут установлены в ложь. +Это, как правило, более чем достаточно для большинства сайтов и следует оставить как есть. Если переопределяете их, то не используйте "processes=1", так как это приведет к отключению любых отладочных WSGI инструментов в браузере, которые проверяют флаг "wsgi.multiprocess". Это происходит потому, что любое использование опции "processes" приведет к тому, что флаг будет установлен в положение истина, даже для одного процесса, и такие инструменты ожидают, что они будут установлены в ложь. -Примечание: если ваш код приложения или модуль расширения третьей стороны не потокобезопасные, то используйте опцию "processes=5 threads=1" взамен. +Примечание: если ваш код приложения или модуль расширения третьей стороны не потокобезопасные, то используйте опцию "processes=5 threads=1" взамен. Это создаст пять процессов в группе процессов демона, где каждый процесс однопоточен. Вы могли бы рассмотреть использование "maximum-requests=1000", если в вашем приложении есть утечки объектов Python, потому что он не в состоянии собрать мусор должным образом. @@ -300,7 +300,7 @@ WSGIScriptAlias / /home/www-data/web2py/wsgihandler.py блокирует публичный доступ к **admin** и **appadmin** -Обычно мы бы просто дали разрешение на весь каталог, в котором находится файл WSGI сценария, но web2py помещает файл сценария WSGI в директории, которая содержит другой исходный код, в том числе пароль админ интерфейса. +Обычно мы бы просто дали разрешение на весь каталог, в котором находится файл WSGI сценария, но web2py помещает файл сценария WSGI в директории, которая содержит другой исходный код, в том числе пароль админ интерфейса. Открытие всего каталога может вызвать проблемы с безопасностью, потому что технически Apache будет дано разрешение обслуживать все файлы вплоть до любого пользователя, который переходит в этот каталог с помощью сопоставленного URL. @@ -506,7 +506,7 @@ Nginx более чем сервер HTTP и обратный прокси-се Nginx прост в настройке и его конфигурационные файлы проще и более компактные, чем соответствующие файлы Apache. -Nginx не поддерживает WSGI, но обеспечивает встроенную поддержку для протокола uWSGI ``uwsgi``:cite.``uwsgi``:inxx +Nginx не поддерживает WSGI, но обеспечивает встроенную поддержку для протокола uWSGI ``uwsgi``:cite.``uwsgi``:inxx В Ubuntu вы можете установить Nginx с: `` @@ -556,9 +556,9 @@ server { uwsgi_param UWSGI_SCHEME $scheme; uwsgi_param SERVER_SOFTWARE nginx/$nginx_version; } - + } -``:code +``:code Вам нужно будет связать символическими ссылками файл и удалить значение по умолчанию @@ -573,16 +573,16 @@ mkdir /etc/nginx/ssl cp web2py.key /etc/nginx/ssl cp web2py.crt /etc/nginx/ssl ``:code - -Затем вам нужно установить и настроить uWSGI - + +Затем вам нужно установить и настроить uWSGI + `` sudo mkdir /etc/uwsgi sudo mkdir /var/log/uwsgi ``:code И создать конфигурационный файл "/etc/uwsgi/web2py.xml": - + `` /tmp/web2py.socket @@ -606,10 +606,10 @@ sudo mkdir /var/log/uwsgi Этот файл предполагает, что web2py установлен под "/home/www-data/web2py", как в случае с Apache. -Кроме того, необходимо отредактировать второй файл конфигурации "/etc/init/uwsgi-emperor.conf": +Кроме того, необходимо отредактировать второй файл конфигурации "/etc/init/uwsgi-emperor.conf": `` -# Emperor uWSGI script +# Emperor uWSGI script description "uWSGI Emperor" start on runlevel [2345] stop on runlevel [06] @@ -621,7 +621,7 @@ exec uwsgi --master --die-on-term --emperor /etc/uwsgi --logto /var/log/uwsgi/uw `` start uwsgi-emperor -/etc/init.d/nginx restart +/etc/init.d/nginx restart ``:code Вы можете перезагрузить uwsgi с @@ -843,7 +843,7 @@ sudo nano /etc/postgresql/9.1/main/postgresql.conf и убедитесь, что он содержит эти две строки `` ... -listen_addresses = 'localhost' +listen_addresses = 'localhost' ... track_counts = on ... @@ -928,7 +928,7 @@ sudo status web2py-scheduler Если вам не нужно запускать Apache для какого-либо другого приложения на сервере, на современных Windows Servers установить web2py позади IIS проще (и более производительнее). Следующие шаги объясняют, как настроить IIS, чтобы обслуживать web2py: Windows Server 2008R2 или выше, требуется. Мы будем исходить из предположения, что вы работаете 2012R2. Термины, используемые для 2008R2 немного отличаются, но это не должно быть проблемой для согласования инструкций. -Конечно, требуется, чтобы Python был установлен на сервере, и вы в состоянии запустить web2py с чем-то вроде +Конечно, требуется, чтобы Python был установлен на сервере, и вы в состоянии запустить web2py с чем-то вроде `` python web2py.py -a 'yourpassword' @@ -941,7 +941,7 @@ python web2py.py -a 'yourpassword' Для того, чтобы IIS "говорил" с питоном, нам нужно установить модуль wfastcgi [[отсюда http://pytools.codeplex.com/releases]]. Это позволит установить небольшой скрипт, wfasctgi.py, то есть обработчик IIS, который будет использоваться для связи с Python. -Теперь откройте **Internet Information Services (IIS) Manager** и нажмите на узел, представляющий сервер. +Теперь откройте **Internet Information Services (IIS) Manager** и нажмите на узел, представляющий сервер. Нам нужно создать ** ** FastCGI процесс, который будет соотносится с обработчиком запуска web2py. @@ -950,13 +950,13 @@ python web2py.py -a 'yourpassword' Начиная с версии 2.10.4, web2py поставляется с файлом конфигурации (web.config, внутри каталога examples), который переопределяет обработчики по умолчанию для того, чтобы работать. Конфигурация IIS запрещает изменение обработчиков из конфигурационного файла, но это легко отключить: перейдите "Feature Delegation", найдите "Handler Mappings" и задайте ему Read/Write. Web2py требуется также возможность записи файлов в его каталоге, поэтому, пожалуйста, убедитесь, что **IIS_IUSRS** группа имеет доступ read/write для папки, где находится web2py. -Если вы хотите использовать web2py под корневым каталогом IIS, то скопируйте исходный код под корень IIS (который, как правило C:\inetpub\wwwroot). Теперь, скопируйте web.config из каталога примеров и поместить его в корневой папке, рядом с web2py.py. Вам только нужно заменить **SCRIPT_PROCESSOR** (ближе к концу файла) в соответствии с приложением FastCGI, которое мы создали ранее: он имеет забавный синтаксис, но он должен соответствовать формату **Полный путь|Аргументы** приложения FastCGI. +Если вы хотите использовать web2py под корневым каталогом IIS, то скопируйте исходный код под корень IIS (который, как правило C:\inetpub\wwwroot). Теперь, скопируйте web.config из каталога примеров и поместить его в корневой папке, рядом с web2py.py. Вам только нужно заменить **SCRIPT_PROCESSOR** (ближе к концу файла) в соответствии с приложением FastCGI, которое мы создали ранее: он имеет забавный синтаксис, но он должен соответствовать формату **Полный путь|Аргументы** приложения FastCGI. Если все установлено с путями по умолчанию, то должно получиться что-то вроде **C:\Python27\python.exe|C:\Python27\Scripts\wfastcgi.py** Этого достаточно, чтобы использовать web2py как "корневое" приложение сайта. Если вместо этого вам нужно запустить web2py под вложенной папкой (скажем, "web2pyapps", так чтобы вы смогли добраться до welcome приложения по http://hostname/web2pyapps/welcome/ вместо адреса по умолчанию http://hostname/welcome/), необходимо два дополнительных шага: - переместите код во вложенную папку с именем web2pyapps - - создайте файл routes.py следующего содержания + - создайте файл routes.py следующего содержания `` routers = dict(BASE=dict(path_prefix = "web2pyapps")) `` @@ -973,14 +973,14 @@ routers = dict(BASE=dict(path_prefix = "web2pyapps")) На сайте Apache есть полный список таких партнеров; поищите Apache 2.4 windows бинарные файлы. Тем не менее, бинарный установщик Windows может поставляться без модуля WSGI. -В этом случае, посетите [[ modwsgi домашнюю страницу по адресу http://code.google.com/p/modwsgi/wiki/InstallationOnWindows]] (в настоящее время по http://code.google.com/p/modwsgi/) и скачайте скомпилированные двоичные файлы для вашей версии Python и Apache. После установки Apache, поместите .so библиотеку в каталоге модулей. +В этом случае, посетите [[ modwsgi домашнюю страницу по адресу http://code.google.com/p/modwsgi/wiki/InstallationOnWindows]] (в настоящее время по http://code.google.com/p/modwsgi/) и скачайте скомпилированные двоичные файлы для вашей версии Python и Apache. После установки Apache, поместите .so библиотеку в каталоге модулей. Вам нужно изменить httpd.conf, чтобы загрузить модуль WSGI; следуйте примеру других модулей для загрузки строк конфигурации. `` LoadModule wsgi_module modules/mod_wsgi.so ``:code -В wiki упоминается об особенности modwsgi в Windows: рекомендуется прочитать. +В wiki упоминается об особенности modwsgi в Windows: рекомендуется прочитать. Вам нужно настроить httpd.conf в соответствии с любой новой установкой Apache. @@ -1055,7 +1055,7 @@ NameVirtualHost *:443 ``Windows services with nssm``:inxx Вместо того, чтобы поддерживать код сервиса Windows в web2py.py, разработчики поддерживают внешнюю оболочку-инструмент 'NSSM'. -NSSM является уважаемым инструментом Windows с хорошими возможностями, такими как автоматический перезапуск сервисов. Это также означает последовательный способ запуска web2py сервисов, сервиса планировщика и расчистки таких процессов, как сессии операций удаления. Использование предыдущей опции -W командной строки больше не поддерживается. +NSSM является уважаемым инструментом Windows с хорошими возможностями, такими как автоматический перезапуск сервисов. Это также означает последовательный способ запуска web2py сервисов, сервиса планировщика и расчистки таких процессов, как сессии операций удаления. Использование предыдущей опции -W командной строки больше не поддерживается. Метод NSSM не использует файл options.py от старого метода. Вместо этого параметры передаются в командной строке (некоторые примеры приведены ниже) ##### nssm recipe: running the scheduler as a Windows service with nssm @@ -1195,7 +1195,7 @@ session.forget() Сессии автоматически забываются, если будут без изменений. -С помощью сессий в базе данных, папка "sessions" не должна быть общей папкой, потому что она больше не будет доступна. +С помощью сессий в базе данных, папка "sessions" не должна быть общей папкой, потому что она больше не будет доступна. ------- Заметим, что если сессии отключены, то вы не должны передавать ``session`` к ``form.accepts`` и вы не можете использовать ни ``session.flash`` и ни CRUD. @@ -1495,10 +1495,10 @@ else: PythonAnywhere это самый простой способ для развертывания приложений web2py. -PythonAnywhere является средой разработки и хостинга Python, которая отображается в вашем веб-браузере и работает на облачных серверах. Они уже настроены со всем, что вам нужно для запуска Python и они специфически поддерживают web2py. По нашему опыту PythonAnywhere прост в использовании, быстрый и мощный. Они также предоставляют базы данных MySQL, Python и оболочки интеграции Dropbox. +PythonAnywhere является средой разработки и хостинга Python, которая отображается в вашем веб-браузере и работает на облачных серверах. Они уже настроены со всем, что вам нужно для запуска Python и они специфически поддерживают web2py. По нашему опыту PythonAnywhere прост в использовании, быстрый и мощный. Они также предоставляют базы данных MySQL, Python и оболочки интеграции Dropbox. Для вас доступен профессиональный хостинг, если бесплатного базового вам не достаточно. -Для того, чтобы использовать PythonAnywhere вам необходимо создать учетную запись, войти, а затем использовать предоставленную веб-панель для добавления нового веб-приложения типа web2py. +Для того, чтобы использовать PythonAnywhere вам необходимо создать учетную запись, войти, а затем использовать предоставленную веб-панель для добавления нового веб-приложения типа web2py. [[image @///image/pythonanywhere1.png center 300px]] [[image @///image/pythonanywhere2.png center 300px]] @@ -1830,13 +1830,13 @@ session.connect(request,response,db=MEMDB(cache.memcache.client)) #### Вопросы Datastore -В то время как функции Google Clould SQL как регулярная база данных SQL, и на самом деле основана на момент написания на MySQL, Google Datastore представляет существенные различия. +В то время как функции Google Clould SQL как регулярная база данных SQL, и на самом деле основана на момент написания на MySQL, Google Datastore представляет существенные различия. ##### Возможная согласованность -''Возможная согласованность'' предлагаемая Google Datastore заслуживает особого внимания. +''Возможная согласованность'' предлагаемая Google Datastore заслуживает особого внимания. В Datastore, транзакции, которые полагаются на первичные ключи Datastore, или общую группу сущностей, предлагают сильную согласованность: каждая последующая транзакция или запрос будет видеть результат какой-либо предварительной транзакции для того же ключа или группы сущностей. -С другой стороны, запросы, которые не зависят от первичных ключей или общих групп сущностей предлагают только ''возможную согласованность'': новые или измененные данные будут в конечном счете доступными для запросов, после неопределенной задержки, которая обычно составляет до нескольких секунд. +С другой стороны, запросы, которые не зависят от первичных ключей или общих групп сущностей предлагают только ''возможную согласованность'': новые или измененные данные будут в конечном счете доступными для запросов, после неопределенной задержки, которая обычно составляет до нескольких секунд. web2py не полагается на первичные ключи Datastore, ни на общие группы сущностей. Выражение: @@ -1847,7 +1847,7 @@ id = db.table.insert(field1=value1, field2=value2) имеет следующий эффект: - Новая строка вставляется в таблицу ``db.table``; строка имеет поле ``id``, значение которому присваивается web2py. Строка также имеет первичный ключ Datastore, но ``id`` ''не'' является этим первичным ключом, и не выставляется. - Индексы на ``db.table`` обновляются. В частности, обновляется индекс по полю ``id``, поэтому новая строка ''в конце концов'' доступна для запросов через ``db.table.id``. -Только после этих двух шагов выполняется завершение, и новые данные становятся доступными для запросов через ``id``. +Только после этих двух шагов выполняется завершение, и новые данные становятся доступными для запросов через ``id``. В частности, следующая общая парадигма web2py будет ''неудачой'': `` @@ -1900,8 +1900,8 @@ db.define_table('product', #### Миграции базы данных -Хорошая практика для миграции с помощью Google AppEngine заключается в следующем. -AppEngine поддерживает несколько версий кода. +Хорошая практика для миграции с помощью Google AppEngine заключается в следующем. +AppEngine поддерживает несколько версий кода. Используется одна версия кода (например, версия 1) для видимого пользователя сайта, и другая версия кода (например, версия 2) для кода администратора. В `` app.yaml`` для версии 2, объявите обработчик следующим образом (предполагается, что используется Python 2.7): `` @@ -1912,11 +1912,11 @@ AppEngine поддерживает несколько версий кода. ``:code Пункт ``login:admin`` гарантирует, что только администраторы могут использовать версию 2. -В строке подключения база данных, укажите ``migrate_enabled=False``. +В строке подключения база данных, укажите ``migrate_enabled=False``. Чтобы выполнить миграцию, то лучше отключить доступ к базе данных одновременно с миграцией. Выполните следующие действия: -- Добавьте файл с именем ``DISABLED`` в корневой каталог вашего приложения версии 1 (родительский каталог из ``/controllers``, ``/views``, и т.д. директорий), и загрузите новую версию на GAE. Это приведет к отключению версии 1, и выведет на экран сообщение ''"Сайт временно закрыт на техническое обслуживание"''. +- Добавьте файл с именем ``DISABLED`` в корневой каталог вашего приложения версии 1 (родительский каталог из ``/controllers``, ``/views``, и т.д. директорий), и загрузите новую версию на GAE. Это приведет к отключению версии 1, и выведет на экран сообщение ''"Сайт временно закрыт на техническое обслуживание"''. - Загрузите до версии 2 кода с ``migrate_enabled=True`` в строке подключения db, и посетите его из учетной записи администратора, запустите миграцию.