You are viewing revision #2 of this wiki article.
This is the latest version of this article.
You may want to see the changes made in this revision.
- Abstract
- About Cloud9
- Step 1 - Login To Cloud9
- Step 2 - Create A New Workspace
- Step 3 - Enter The Workspace
- Step 4 - Exploring The Workspace
- Step 5 - Link Yii
- Step 6 - Choose Yii Version To Use
- Step 7 - Create Yii Skeleton App
- Step 8 - Final Touch
- Step 9 - Publish Workspace On GitHub
- Resources
Abstract ¶
This tutorial will guide you through the process of creating a yii application using Cloud9. We will use a git workspace to enable version control and also show how to link the Cloud9 workspace to GitHub.
About Cloud9 ¶
From the Cloud9 homepage:
Cloud9 IDE is an online development environment for Javascript and Node.js applications as well as HTML, CSS, PHP, Java, Ruby and 23 other languages.
But Cloud9 not only allows you to edit your sources online, it also provides the possibility to run your project.
Step 1 - Login To Cloud9 ¶
Go to to Cloud9 Homepage and log in. Nothing special about it. I just wanted to point out that I created an account and linked it to my GitHub account later. But they also provide an instant login using an existing GitHub (or BitBucket) account. So maybe you can skip another registration process.
Step 2 - Create A New Workspace ¶
Once you've logged in, you can create a new workspace using the big green button on the upper left in your dashboard. It's hard to miss.
If you click it, you'll be presented two options:
- Create a New Workspace
- Clone From URL
For now, I'll focus on using Cloud9 without any external services like GitHub, so choose the first option. A dialog will pop up, providing you to set some options for the new workspace:
- Name your workspace: Just fill in a name for your new project. I'm not sure about what characters allow, but I experienced that the name will be converted to lowercase.
- Workspace Privacy: I'll keep the default, "Open and Discoverable". As a free user, I can only set up one private workspace. And currently, I'm not doing anything secret. ;)
- Type of workspace: Again, I'll keep the default, "Git". This will initialize the workspace as a git repository. This allows us to keep track of the changes we make. In addition, it will also allow us to link the whole project to GitHub at a later time. I guess "Mercurial" is very similar, "FTP" and "SSH" allow you to store the project on your own server (I didn't look into that).
Confirm your settings by clicking the "Create" button and your workspace will be initialized.
Step 3 - Enter The Workspace ¶
Once the newly created workspace shows up in the left side panel under "My Projects", select it. The main panel will update and show some information about the workspace:
- Its public url
- An activity feed
- A description (you can edit it right in place)
- The list of team members (only you at this state)
At the top of the main panel, you will realize two buttons:
- A "Delete" (workspace) button at the right
- A "Start Editing" button at the left
Click "Start Editing" to enter the workspace.
Step 4 - Exploring The Workspace ¶
Notice the little input at the very bottom of the workspace.
For one, it allows you to interact with the editor programatically. Try it and enter "open README.md" - guess what? It will open the README.md file. This file is included by default in the newly created workspace. It contains information about how to configure the newly created project to work with GitHub. But that's not what we want to do right now. First, let's explore Cloud9 a bit more.
When you executed the command above, a console should have opened (you can toggle it visible/invisible using the little switch button at the right side of the input). As a free user, you won't have full access to all console commands, but you can use it to navigate the filesystem, create and delete files and folders and so on. Let's see what version of php is availabele. Enter "php -v". Mhm... PHP 5.3.3... Maybe they'll update it at some time. ;)
For more information, enter "php -i". This might be the right time to maximize the console, since output will be somewhat lengthy. In theory, there is this "detach console" button (console toolbar, second from right). It should maximize the console, but for some reason this doesn't work reliably (at least not for me). Instead, you can make sure the button is NOT pressed and manually increase the height of the console (there is a splitter between the console and the editor). Unfortunatelly, even with a maximized console, the output isn't very readable...
Let's try to get some html formatted view if the php info:
- Create a new file
- Insert the following content
<?php
phpinfo();
- Save the file as "index.php"
Now go to the run configuration view: It is the icon showing the running man, just above the project explorer. Here, we switch the "Runtime" from "Default" to "Apache+php".
With this runtime configuration, when you click "debug" (in the editor's menu), Cloud9 will not try to run the the curretly active file on the command line, but instead will run an apache process. The console will tell you the URL under which you can access your files. Currently, it follows the schema: "http://{workspace}.{user}.c9.io", so for the workspace I created for this tutorial, the URL is "http://yii-c9-tutorial.bwoester.c9.io". If you access the URL, you should see the php info as nicely formatted html.
Step 5 - Link Yii ¶
Okay, we've seen how we can edit source code and we know how to execute php webpages. Time to get started with our beloved yii framework! :)
The Cloud9 environment doesn't know anything about yii, so simply uploading an existing yii application won't work. We need the framework itself included in the workspace. We could certainly fetch a tarball on our local machine, extract it and the upload the framework folder to our workspace. But there is a better way.
Remember when we created the workspace, we chose the "Git" option? This made our whole workspace a git repository. You can check this by entering "git status" in the console.
At this stage, it reports 1 untracked file, the index.php file we created and which we haven't committed yet. Let's commit it, just to have a clean repository state before linking yii:
git add index.php
git commit -m "added index.php showing phpinfo"
Next, let's add the yii repository as a submodule of our workspace repository. This allows us to pull new versions from the yii upstream repository whenever we feel the need, and it doesn't require us to commit the whole framework into our own repository.
Execute the following command:
git submodule add git://github.com/yiisoft/yii.git yii
This might take a few seconds. If your project explorer doesn't update automatically, you can always refresh it manually. Just right click the workspace node and select "Refresh" from the context menu.
Doing another "git status" will show you two new files to be committed:
- .gitmodule - tells git what folders actually are submodules
- yii - the yii framework repository
We commit both:
git commit -m "added yii repository as submodule"
Step 6 - Choose Yii Version To Use ¶
At this stage, what we can see in the "yii" folder is the most recently available development snapshot of the framework. It's not said to be unstable, but I prefer to work on a released code base.
Since we just cloned the whole repository as a submodule, we can select to work on every revision we want. Thankfully, the Yii team taggs every releases, so it is as simple as:
git checkout {tagName}
to put the repository into this tagged state. The last version that has been released at the time of writing this tutorial is v1.1.12. So this is what I'm going to use:
cd yii
git checkout 1.1.12
The command will print a notice that the repository (the submodule, not our workspace repository) now is in 'detached HEAD' state. This is okay. Just remember not to commit changes in this state.
Go back to the workspace repository and issue a git status:
cd ..
git status
It will tell you that the yii submodule has changed. Let's commit this change. It is important to realize that this won't be a commit in the yii repository, but one in our workspace repository. It just tells our workspace what version of the submodule is to be used.
git add yii
git commit -m "Use yii v1.1.12"
Step 7 - Create Yii Skeleton App ¶
Almost done. We have the latest release of the yii framework available, we have a console, let's create the skeleton app.
There are 2 pitfalls I encountered:
As free users, we're not allowed to execute shell scripts. This means, we can't simply call
yii/framework/yiic webapp ...
Instead, we have to explicitly call the php script:
php yii/framework/yiic.php webapp ...
The webapp command won't work if we only provide a path relative to the current working directory. So the following won't work:
php yii/framework/yiic.php webapp sampleApp
Instead, we have to provide an absolute path. To find out the absolute path of your workspace, issue
pwd
Then copy that path and use it in the webapp command
php yii/framework/yiic.php webapp /var/lib/stickshift/149e551bbedc4393b4773f93176a8677/app-root/data/267105/sampleApp git
After the skeleton app has been generated, don't forget to commit it:
git add sampleApp
git commit -m "created yii skeleton app"
Step 8 - Final Touch ¶
For easy access, let's modify our index.php file. Instead of printing the phpinfo, it should redirect a visitor directly to our sample app. Replace its content with:
<?php
header('HTTP/1.1 307 Temporary Redirect');
header('Location: sampleApp/');
?>
<html>
<head>
<title>Moved</title>
</head>
<body>
<h1>Moved</h1>
<p>This page has moved to <a href="sampleApp/">sampleApp</a>.</p>
</body>
</html>
Now, if we start the "Apache+PHP" runtime, Cloud9 offers us the link to the workspace. If we click it, index.php will be processed by the server. It sends the redirect header back to our browser which in turn will open our sampleApp.
Commit.
git commit -a -m "make index.php redirect to the yii application"
Unfortunatelly, when I access the yii application, I am presented a php warning. Something about date timezone settings. Maybe this is due to a different server setup, I never encountered that warning before. But it can be easily fixed. I decided it is a configuration thing, so it goes into sampleApp/protected/config/main.php:
<?php
// uncomment the following to define a path alias
// Yii::setPathOfAlias('local','path/to/local-folder');
date_default_timezone_set( 'UTC' );
Commit again.
git commit -a -m "set the default timezone to UTC"
At this stage, we have a working, version controlled yii project. We can work on it wherever we are (given we have internet access and a webbrowser at hand), we can run it, and can invite our friends to collaborate.
Step 9 - Publish Workspace On GitHub ¶
As promised, I will also show you how to push the whole workspace to GitHub. Maybe someone wants to clone it, fix it and send you pull requests. Or open tickets. Comment on some lines of code. Do GitHub stuff.
Create a new, empty repository on GitHub. To prevent confusion, I'd name it the same as the Cloud9 workspace, but it's up to you.
Copy the SSH url of the newly created repository. For this tutorial, it is "git@github.com:bwoester/yii-c9-tutorial.git"
In the Cloud9 workspace console, add the GitHub repository as new remote:
git remote add origin git@github.com:bwoester/yii-c9-tutorial.git
Push to the GitHub repository and set it as upstream
git push -u origin master
That's it. Thanks for reading!
Resources ¶
- Tutorial workspace on Cloud9: http://c9.io/bwoester/yii-c9-tutorial
- Repository on GitHub: https://github.com/bwoester/yii-c9-tutorial
How about sqlite?
This is a really great way to have your work accesible anywhere! Thanks for the tutorial.
Do you know if it is possible to use sqlite in this setup, to have a file based database backend for testing purposes?
sqlite
Using sqlite should work as long as you don't switch development environment. I think Cloud9 uses Red Hat Linux...
However, I experienced problems with copied sqlite databases when I switched from my local dev env (win7+wamp) to a test server running an old debian (etch if I remember correctly). Seemed like the one sqlite library couldn't read the sqlite file created by the other sqlite library.
I don't know if this was a problem due to major verison differences or if sqlite files are generally not portable between operation systems.
I also read an article about using heroku to host applications developed in Cloud9. The author stated that there was some free option that provided a MySQL database. I'm not totally sure if this is correct, to me it seems that you can use a dev DB with limited rows (10k - should be enough) for a limited time...
Anyways, here's the article: http://glamour.tweakblogs.net/blog/8051/building-wordpress-sites-in-the-cloud.html
A third option might be to setup a known state of the database using migrations or fixtures.
Can't log in to webapp?
Firstly, thanks for a great tutorial!
I did exactly what you described and even got the same date error:-) The problem now is that when I log in to the freshly created Yii webapp, it does not seem to log me in.
It seems to work when I select 'Remeber Me' however. The PHPSESSION cookie is created in the browser, but I don't think the session is maintained on the server-side (Cloud9)
Could this be the problem and if so, how do I get around this?
Re: Can't log in to webapp?
Hi antonm,
Sorry for the late reply! I just tried to check this behavior, but unfortunatelly I can't start an apache process. Seems c9 is a bit short on resources currently. However, if it is a problem related to their hosting environment, you could try to configure an alternative session component for your web application. For a quick test, you could try CCacheHttpSession. But remember that cache data may be cleaned unexpectedly, so for a more robust setup, CDbHttpSession together with a sqlite db might be better.
Thanks!
I did not know about Cloud9. Looks like something that I will checkout :)
If you have any questions, please ask in the forum instead.
Signup or Login in order to comment.