Donnerstag, März 08, 2012

isUnique Validator for lithium (li3)

If you want to check your model against uniqueness. this snippet might help you:

Mittwoch, November 02, 2011

Lithium & HTML5 Boilerplate => new default Template

Lithium, the most RAD php5 Framework is great, but still not yet fully perfect. You ill need to download hmtl5 compatibility ressources (js,css) from HTML 5 Boilerplate and use this template: Then, your site is prepared for html5 Contend and will work even in IE6 ;) In the (far) future, i will add automatic minification.. so stay tuned

Montag, Oktober 31, 2011

PHP Project deployment via Capistrano under OS-X Lion with git

Installing rvm (ruby version manager):

First you should install the ruby version manager (rvm) for installing ruby 1.9.2.:

>bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )

this will install rvm under in /Users/your_username/.rvm/
then copy the bash statement and move it into your users .profile or .bash_profile

>[[ -s "/Users/your_osx_username/.rvm/scripts/rvm" ]] && source "/Users/your_osx_username/.rvm/scripts/rvm"

next step is to restart your terminal or source the profile´s file:

>source .profile

or

>source .bash_profile

Installing ruby 1.9.2 via rvm:

Thats easy! Just type:

>rvm install 1.9.2

This will download and compile ruby 1.9.2. Now you have to tell rvm to use 1.9.2

>rvm --default 1.9.2

if you open a new konsole and run

>ruby -v

This will print out : ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.2.0]
or newer

Installing capistrano:

In the future we will deploy our project in different environments (aka.: test, staging,production...) So you need two gems: capistrano and capistrano-ext

> gem install capistrano capistrano-ext

Now your system is capable to deploy!

Setup your Project:

go into your project root and setup capistrano:

>cd my_project
my_project> capify .

this will create a File named: Capfile and a directory called config with deploy.rb in it.
deploy.rb contains:

my_project> cat config/deploy.rb

set :application, "set your application name here"
set :repository,  "set your repository location here"

set :scm, :subversion
# Or: `accurev`, `bzr`, `cvs`, `darcs`, `git`, `mercurial`, `perforce`, `subversion` or `none`

role :web, "your web-server here"                          # Your HTTP server, Apache/etc
role :app, "your app-server here"                          # This may be the same as your `Web` server
role :db,  "your primary db-server here", :primary => true # This is where Rails migrations will run
role :db,  "your slave db-server here"

# if you're still using the script/reaper helper you will need
# these http://github.com/rails/irs_process_scripts

# If you are using Passenger mod_rails uncomment this:
# namespace :deploy do
#   task :start do ; end
#   task :stop do ; end
#   task :restart, :roles => :app, :except => { :no_release => true } do
#     run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
#   end
# end
Set the name of your Project, (Capistrano will deploy the project under this name). Your repository, scm and server ip´s.
Addtionally we want to deploy via git as our current systems git user. So we have to forward our git agent and define the servers user name.
An example deploy.rb: (assuming my_project as Projectname, an example git repo and that your server is running a unix system with a user named administrator)
set :application, "my_project"
set :repository,  "git@github.com:example/my_project.git"

set :scm_user, :git
set :deploy_via, :remote_cache
set :scm, :git

set :deploy_to, '/home/administrator'
set :use_sudo, false
set :ssh_options, {:forward_agent => true}
set :branch, "master"

set :user, :administrator

role :web, "ipV4"
role :app, "ipV4"
role :db,  "ipV4", :primary => true


namespace :deploy do
  task :copy_database_yml do
    run "cp #{deploy_to}/shared/connections.php #{release_path}/app/config"
  end
end
after "deploy:finalize_update", "deploy:copy_database_yml"
So you have to put in:
  1. the project name
  2. the git repo
  3. and the ip´s of your application + webserver and your db ip
and maybe modify the servers username and change or disable the copy_database_yml task.
Finally, you have to set up your server, check its dependencies and just do deployment :)

Server Setup

you could check your deploy.rb like so:

my_project> cap deploy:check

If you will be asked about a password, you should setup ssh key login (e.G.: create a keyfile and append it to administrators authorized keys)
* executing `deploy:check'
  * executing "test -d /home/administrator/releases"
    servers: ["ipV4"]
    [ipV4] executing command
    command finished in 170ms
  * executing "test -w /home/administrator"
    servers: ["ipV4"]
    [ipV4] executing command
    command finished in 88ms
  * executing "test -w /home/administrator/releases"
    servers: ["ipV4"]
    [ipV4] executing command
    command finished in 89ms
  * executing "which git"
    servers: ["ipV4"]
    [ipV4] executing command
    command finished in 91ms
  * executing "test -w /home/administrator/shared"
    servers: ["ipV4"]
    [ipV4] executing command
    command finished in 89ms
The following dependencies failed. Please check them and try again:
--> `/home/administrator/releases' does not exist. Please run `cap deploy:setup'. (ipV4)
--> You do not have permissions to write to `/home/administrator/releases'. (ipV4)
--> `/home/administrator/shared' is not writable (ipV4)
So you have to create the directories by running capistranos setup script and activate the servers git ssh:

my_project> cap deploy:setup

Capistrano will create some directories, which are not used by php and you could modify caps deploy and setup tasks for it but, for now: You are able to deploy via capistrano :)

my_project> cap deploy

I will add some more php setup info later. (Especially for lithium, li3 PHP Projects)

Update:

If agent forwarding wont work on osx see:
http://www.schmidp.com/2009/06/23/enable-ssh-agent-key-forwarding-on-snow-leopard/

Mittwoch, Oktober 19, 2011

Push objects and arrays to lithiums Logger-Class

Just added a simple Filter to my projects debug environment: With it, you are able to push objects and arrays to the Logger Class. If you combine it with the FirePHP Loging Adapter, debugging is kind of fun ;)

Mittwoch, Oktober 12, 2011

Dumping lithium SQL Statements via Filters

Zum einfachen Debuggen /dumpen von Raw-SQL Statements in lithium (li3) einfach folgende Zeilen in sein bootstrap Prozess mit einbinden und gewünschtes var_dump auskommentieren: Alternativ zu var_dump könne man auch den Lithium eigenen Logger nutzen, welcher die Daten dann beispielsweise (je nach eigener Logger Konfiguration) in ein File schiebt:

\lithium\analysis\Logger\Logger::write('info', $your_data_as_str);

Montag, September 12, 2011

ITunes und die zweite Festplatte. (Error 13001)

Kürzlich habe ich meinem 2007er MBP eine SSD gegönnt und sie mittels Drive-Bay Adapter, statt des Super-Drives" eingebaut.
Anschließend mittels Carbon Copy Cloner die OS-X Installation auf die SSD geschoben und erleichtert festgestellt, dass sich OS-X Snow-Leopard problemlos starten ließ. Um die SSD nicht übermäßig vollzuknallen, wurde vorher ein "nackter"-Admin Account erstellt. Das Home-Verzeichnis meines bisherigen Users sollte vorerst auf der alten Platte bleiben.
In den Systemeinstellungen -> Benutzer und Gruppen -> Username -> erweiterte Einstellungen (Durch "Rechtsklick" erreichbar) :habe ich für meinen User als Home-Verzeichnis daher die alte Platte unter /Volumes//Users/username stehen. Auf der SSD legte ich sicherheitshalber noch einen Symlink von /Users/username auf den obigen Pfad an.
Die alte Platte hieß (warum auch immer) MBP 15". Also mit Leerzeichen und Anführungszeichen!


Alle Programme starteten ohne Probleme und das System war merklich schneller als vorher. Leider startete iTunes nicht mehr. Bzw. quittierte immer mit dem Fehler 13001 den Dienst.
Selbst nachdem sich iTunes eine neue Lib bauen sollte. Auch: Apple Helpdesk: iTunes: "Error 13001" und diverse andere Foren/Blogs konnten mir nicht weiterhelfen.

Bis ich heute auf die Idee kam, meine alte Platte in old_drive umzubenennen.

Merke: Der Source von iTunes scheint so alt zu sein, dass es mit Anführungszeichen im HomePfad nicht zurecht kommt...

Donnerstag, September 23, 2010

VMware Konsole mit OSX

Es ist ein altbekanntes leidiges Thema: VMware bietet keinen OSX Client für die VMWare Konsole an.
Das Plugin für das Webfrontend des VMWare-Servers ist nämlich nur unter Linux und Windows nutzbar.

Aber es gibt dennoch zwei Möglichkeiten via Server auf die Clients zuzugreifen.

  1. Auf dem Server X11 und einen Firefox installieren und ein SSH VNC Routing einrichten.
  2. Einzelne VM´s so zu konfigurieren, dass man via VNC Server-Connect eine VM erreichen kann.
Die erste Möglichkeit ist ein wenig frickelig und erfordert vor allem eine X11 Installation. D.h. ein eigentlich relativ schlankes Serversystem muss um ein Desktopenvironment bereichert werden.
Da ich eigentlich nur während des Installationsprozesses eine Konsole benötige, ist der zweite Weg für mich die erste Wahl.
Für OSX wird ein VNC Client benötig. z.B. Chicken of the VNC

  1. Via WebUi die "Ziel-VM" herunterfahren/stoppen.
  2. SSH Connect mit dem VM Server User/Root User herstellen.
  3. in das Verzeichnis der "Ziel-VM" gehen und als Superuser das *.vmx File um folgenden Inhalt erweitern:
    remotedisplay.vnc.enabled = "TRUE" 
    remotedisplay.vnc.port = "5900" 
    remotedisplay.vnc.password = "test123"
  4. Im WebUi die VM wieder starten.
  5. VNC Client in OSX öffnen und die IP des VM Servers eingeben. 
fertig :)