Tag Archives: Google App Engine

Google Cloud Storage – Set ACL for objects in a bucket

Hi I have been trying to upload files to Google Cloud Storage from my Google App Engine App (PHP) and got stuck when trying to set the ACL for those files. I tried to set the ACL manually in my code at the time of file upload and it was proving to be tricky as my app is using Laravel which is using a different way to handle file uploads.

For people using normal php scripts can use following method given in GCS docs.

 

<?php
use google\appengine\api\cloud_storage\CloudStorageTools;

$object_url = 'gs://my-bucket/'.time().rand(0,1000).'.txt';
$options = stream_context_create(['gs'=&gt;['acl'=&gt;'public-read']]);

$my_file = fopen($object_url, 'w', false, $options);
for($i=0;$i&lt;900;$i++) {
  fwrite($my_file, 'Number '.$i.' - '.rand(0,1000).'\n');
}
fclose($my_file);

$object_public_url = CloudStorageTools::getPublicUrl($object_url, false);

header('Location:' .$object_public_url);

But there is a different, much easier option using GSUTIL tool. With this tool we can give a command on a bucket to set the default ACL for that bucket. So in my case that was public access.

First before giving the command follow steps given in this url to install the gsutil tool.

After installing set up your credentials as per this link.

To setup the connection first run this command:

C:\Python27>python c:\gsutil\gsutil config

Then give the following command.

 

C:\Python27>python c:\gsutil\gsutil defacl set public-read gs://your-bucket-name

This will make all your future uploads public read enabled.

If you want to further learn about gsutil acl commmands you can read up here.

Advertisements

Google App Engine Rollback update

Sometimes when your uploading your app to Google App Engine if something goes wrong during the process, And when you retry to upload you get an error asking to rollback previous action. This is how to run that command.

C:\Program Files (x86)\Google\google_appengine> C:\Python27\python.exe appcfg.py
rollback d:\wamp\www\projectname --oauth2

you can simplify this by adding python.exe and appcfg.py paths to your system path variables.

For mac

/usr/local/google_appengine/appcfg.py rollback [your-project-directory]

Google App Engine Upload Error – This application does not exist

If you started getting the error “This application does not exist” after you started using OAuth to authenticate and upload your application, This is the solution.

Cause – Its only saving the OAuth token for a single account. So if you like me is using multiple app engine accounts you might want to follow this instructions.

App engine launcher saves the OAuth token on your home folder and its named –

.appcfg_oauth2_tokens

You need to find and delete this file. On windows machines it will be under C:\Users\admin or C:\Users\[Username]

How to host your website on Google App Engine for free.

Ok Guys and Girls. Today I am going to teach you how to host your website on Google App Engine for free. This is quite easy, but please note that this method is for a website that doesnt use a Database. So if your website is using a CMS like WordPress this will not work. You can do that as well by using the method given on this link but you have to pay for Google Cloud SQL then.

Ok lets get started.

Step 1

First go to the following link,

https://console.developers.google.com

You will get a screen like following,

Google Developers Console - Google Chrome_2014-06-08_15-42-42Step 2

Click the big red button that says “Create Project”

You will get the following screen,

Google Developers Console - Google Chrome_2014-06-08_15-46-27

On that enter a project name and a project id, for this you can use Your website name as the project name and create a unique project id (you can combine yourname-yourwebsite to get a unique name)

Then click the Create button to create the project. This will take a few moments.

Step 3

Ok now your project is created. Now you just need to upload your website content to the App Engine project you just created.

To do that first you need to download Google App Engine Launcher which is a simple tool available for all platforms. It comes free when you download the Google App Engine SDK which you can do by going to this link.

https://developers.google.com/appengine/downloads#Google_App_Engine_SDK_for_PHP

Download the setup file for your platform and install it. (You need to have python installed on your computer for the Google App Engine Launcher to work, Get Python from here. Make sure you get Python 2.7.6 newer version is sometimes not supported.)

Then you will get an icon like this on your desktop or start menu.

_2014-06-08_15-52-06

Click on that to launch The Google App Engine Launcher.

Greenshot image editor - _2014-06-08_15-52-06

Step 4

Ok on the Google App Engine Launcher.

Go to file->Create New Application

on the window that you get,

Google Developers Console - Google Chrome_2014-06-08_15-59-14

Enter the project id you gave on the Google Cloud Console when you created the new project.

Browse and select the Parent Directory of the website files on your computer. This creates a folder under that parent directory in the project id you gave. So you will have to move the website files into that folder.

Select PHP as the runtime.

Click Create button.

Step 5

This will create App Engine files in the website files folder.

In that you need to edit the App.yaml file. This is where you tell the app engine app where all your files are and how you want them to be launched.

So go to your website project folder on your local computer and open app.yaml file on notepad. Or on the Google App Engine Launcher click the newly created project and Click the Edit Icon.

Greenshot image editor - Google Developers Console - Google Chrome_2014-06-08_15_2014-06-08_16-04-50

I am adding my app.yaml file here to show you how you need to add code sections to load Javascript, Css, images and main url files.

Like I have given you will have to give all the static file folders in your website. Here in my website all traffic is directed to my index.php file. If you have other files you will have to modify that part like following.

For each of your links you have to give like above.

Ok now your ready to upload the files.

Step 6

Go to your Google App Engine Launcher, Select your project and click the Deploy button at the top.

app

It will start uploading the files. Once completed you can go to the following link to see if you website is working properly.

projectid.appspot.com (project id is the unique project id you gave when you created the project on Google Cloud Console.)

Ok If your website is working fine, the Next step is to point your domain to the Google App Engine hosted website.

Step 7

Go to Google Cloud Console (https://console.developers.google.com)

Click your project Name

Google Developers Console - Google Chrome_2014-06-08_16-15-53

You will get your project view. This has lots of functionality, explore at your own risk 😉

For our purpose click the App Engine link on the side bar, under that you get a link called Settings Click on that. After that click the custom domains tab on the top.

_2014-06-08_16-18-46

 

Ok on that its pretty self evident what you need to do, But let me explain each step.

1. Verify you domain

Enter your domain and click verify, it will open a new tab and show you verification options. Easiest way is to select your domain provider and click verify. If your domain registrar is not in the list, click Other and you will get a TXT record which you need to add to your DNS settings. (If you dont know how to edit your DNS better to check with your domain provider. It can mess up your website if you get it wrong.)

2. Select your domain in the second step and it will show you DNS records as the Step 3, which you need to add to your DNS Settings.

Google Developers Console - Google Chrome_2014-06-08_16-26-18

That’s all. It looks like a long process, but its quite simple. Try and let me know how you did. 🙂

Sending Emails With Google App Engine PHP

So here are some tips on how to send email using PHP on Google App Engine. This basically covers how I overcame the problems when I tried to implement this.

Check https://developers.google.com/appengine/docs/php/mail/ before starting to read my version.

Sending HTML – Use htmlBody in the mail options to include the message body this will preserve your html code. other wise it will just print the html code out.

require_once 'google/appengine/api/mail/Message.php';

use google\appengine\api\mail\Message; // make sure this is at top of the page

// ...

$message_body = "...";

$mail_options = (
    "sender" => "admin@example.com",
    "to" => "user@example.com",
    "subject" => "Your example.com account has been activated.",
    "textHTML" => $message_body
);

try {
    $message = new Message($mail_options);
    $message->send();
} catch (InvalidArgumentException $e) {

}

including the Message.php file – If you include the use statement partway down the page it will not work. I had a hard time figuring this out but just php common sense. Make sure you add the use statement on the top of the page before any php code. Then you will be fine.

Also make sure the from address is a Google Apps for Business Account, then things are just plain easy.