
@amygdala
http://plus.google.com/+AmyUnruh
- Guestbook app uses Cloud SQL
See 'getting started' tutorial: http://developers.google.com/appengine/docs/php/gettingstarted/
$options = [ "gs" => [ "Content-Type" => "text/plain" ]]; $ctx = stream_context_create($options); file_put_contents("gs://my_bucket/hello.txt", "Hello", 0, $ctx); $fp = fopen("gs://my_bucket/some_file.txt", "w"); fwrite($fp, "Hello"); fclose($fp);
Configure your app to allow includes from GCS (Twig, Smarty, etc.):
google_app_engine.allow_include_gs_buckets = "bucket1, bucket2"
app.yaml
file... handlers: - url: /(.*\.(htm$|html$|css$|js$)) static_files: wordpress/\1 upload: wordpress/(.*\.(htm$|html$|css$|js$)) application_readable: true - url: /wp-admin/(.+) script: wordpress/wp-admin/\1 secure: always - url: /wp-cron.php script: wordpress/wp-cron.php login: admin - url: /wp-(.+).php script: wordpress/wp-\1.php - url: /(.+)?/? script: wordpress/index.php
app.yaml
for a Laravel appapplication: your-app-id version: one runtime: php api_version: 1 handlers: - url: /favicon\.ico static_files: public/favicon.ico upload: public/favicon\.ico - url: /assets/(.*\.(htm$|html$|css$|js$|png$)) static_files: public/assets/\1 upload: public/assets/(.*\.(htm$|html$|css$|js$|png$)) application_readable: true - url: /.* script: public/index.php
Tasks are units of work to be performed by the app.
Task objects contain a request handler URL and an optional payload.
require_once 'google/appengine/api/taskqueue/PushTask.php'; use \google\appengine\api\taskqueue\PushTask; ... $task_params = ['feed_url' => $feed_url, 'user_id' => $user_id]; $task = new PushTask('/do_add_feed_task', $task_params); $task->add();
require_once 'google/appengine/api/taskqueue/PushTask.php'; use \google\appengine\api\taskqueue\PushTask; ... $task_params = ['feed_url' => $feed_url, 'user_id' => $user_id]; $task = new PushTask('/do_add_feed_task', $task_params); $task->add();
The /do_add_feed_task
handler script:
<?php $user_id = $_POST['user_id']; $feed_url = $_POST['feed_url']; // in the handler, add the feed based on the task params if (!addNewFeed($feed_url, $user_id)) { // .... }
app.yaml
filehandlers: ... - url: /do_add_feed_task script: do_add_feed_task.php login: admin
- url: /(.+)_task script: /\1_task.php login: admin
$task_options = [ 'delay_seconds' => $task_delay_seconds, ]; $task = new PushTask('/rss_poll_handler', ['feed_url' => $feed_url], $task_options);
queue: - name: rss-poll rate: 50/s - name: add-feed rate: 10/s
require_once 'google/appengine/api/taskqueue/PushTask.php'; use \google\appengine\api\taskqueue\PushTask; ... $task = new PushTask('/rss_poll_handler', ['feed_url' => $feed_url], $task_options)->add('rss-poll');
- name: demo-fast-rss-poll rate: 70/s max_concurrent_requests: 25 - name: demo-medium-rss-poll rate: 50/s max_concurrent_requests: 25 ...
... And schedule next feed poll according to the results returned, then pick queue based on that delay.
// Choose a queue to enqueue to based on the time the task will run. foreach($task_delay_to_queue_name_map as $delay => $name) { if ($task_delay_seconds < $delay) { $queue_name = $name; break; } }
Google Cloud Platform Starter Pack allows developers from affiliated partners to receive $2,000 of credit.