24. Februar 2012 §
In diesem Artikel möchte ich kurz zeigen, wie meine lokale Entwicklungsumgebung für PHP eingerichtet ist, und wie man entfernte (auf einer VM liegende) PHP-Skripte auch über das CLI in Netbeans debuggen kann.
Server (VM) einrichten
Unter Windows nutze ich eine virtuelle Maschine (via Virtualbox), auf der die Ubuntu Server Edition läuft. Dank VBoxHeadlessTray kann die VM bequem beim Bootvorgang mit gestartet werden und stört nicht weiter.
Auf dem Server läuft:
sudo apt-get install apache2 apache2-utils libapache2-mod-php5 mysql-server php5 php5-cli php5-common php5-curl php5-gd php5-imagick php5-mcrypt php5-mysql php5-xdebug phpmyadmin ntp samba samba-common screen vim subversion git |
Samba konfigurieren
Samba ist zwar nicht optimal als Dateisystem, mit diesen Einstellungen (/etc/samba/smb.conf) und wenn die VM auf einer SSD-Platte liegt aber durchaus auf 40-60 MB/s und geringe Latenzzeiten zu bringen:
workgroup = HEIMNETZ
name resolve order = lmhosts host bcast
deadtime = 100
keepalive = 150
socket options = TCP_NODELAY,IPTOS_LOWDELAY,SO_KEEPALIVE,SO_SNDBUF=65536,SO_RCVBUF=65536
use sendfile = no
oplocks = no
level2 oplocks = no
log level = 0
debug level = 0
[Webroot]
comment = Apache
path = /var/www
valid users = www-data,webuser
force group = www-data
read only = No
create mask = 0644
locking = No |
Nachdem als Samba-User hinzugefügt wurde (sudo smbpasswd webuser) kann die Freigabe mit einem Rechtsklick als Netzlaufwerk (bei mir Z:) verbunden werden. Permanent und mit gespeichterten Zugangsdaten funktioniert bei mir (Win 7) leider nicht. Jetzt kann Netbeans auf die Dateien im Webroot bequem über den lokalen (Beispiel-)Pfad auf die Quelldateien zugreifen. Bei einer Magento-Installation dauert das erste Indizieren 5-10 Minuten, danach ist das Ganze aber erstaunlich flüssig zu benutzen.
XDebug konfigurieren
Um xdebug benutzen zu können, muß dem Host-Rechner Zugriff gewährt werden. Dazu bearbeitet man mit dem Editor der Wahl die xdebug Konfiguration unter /etc/php5/conf.d/xdebug.ini:
xdebug.remote_enable=On
xdebug.default_enable=On
xdebug.remote_handler=dbgp
xdebug.remote_host=<DEIN_HOSTNAME>
xdebug.remote_port=9000
xdebug.idekey=netbeans-xdebug |
Danach einmal den Apache neustarten, damit die Konfiguration eingelesen wird. Um das Debugging auf dem CLI zu starten habe ich einen Bashscript im Netz gefunden (leider habe ich die URL des originalen Autors nicht mehr):
#!/bin/bash
XDEBUG_CONFIG="idekey=netbeans-xdebug" php -dxdebug.remote_host=`echo $SSH_CLIENT | cut -d "=" -f 2 | awk '{print $1}'` $1 |
Dieser Skript liegt bei mir unter /usr/local/bin/xdebug und braucht nach der Erstellung natürlich noch ein sudo chmod 755 /usr/local/bin/xdebug um aufgerufen werden zu können.
Netbeans für Remote-Debug konfigurieren
In Netbeans muß unter Extras > Optionen > PHP > Debugging der Port auf 9000 stehen, die Session ID “netbeans-xdebug” lauten und der Haken bei “Stop at first line” gesetzt sein. Alles andere ist bei mir deaktiviert.
Die eigentliche Konfiguration erfolgt in den Eigenschaften des Projekts. Mit einem Rechtsklick auf das Projekt im Reiter “Projekte” auf der linken Seite gelangt man zu den Eigenschaften des Projekts. Dort zur “Run Configuration” wechseln und einen neuen Eintrag erzeugen. Ich habe meinen “Manual/CLI” genannt. Hier muß nur “Run As” auf “Local Website” gestellt sein. Mit einem Klick auf “Advanced…” kommt man ins Untermenü. Dort bei “Debug URL” den Radiobutton auf “Do not open Webbrowser” setzen.
Am wichtigsten ist die Einstellung beim Path Mapping, da Netbeans sonst die zu debuggenden CLI-Skripte nicht anzeigen kann. Dort bei “Server Path” einfach “/var/www” eintragen und bei “Project Path” unser vorher gemapptes Laufwerk Z: auswählen.
Debugging starten
In Netbeans kann jetzt jederzeit eine Debugging-Sitzung gestartet werden (grüner Pfeil mit rotem Punkt in der Werkzeugleiste) und Netbeans wartet daraufhin auf eine xdebug-Verbindung. Via Putty kann man dann auf der VM einfach xdebug test.php aufrufen, und Netbeans nimmt sofort die Verbindung auf und zeigt test.php im Debugger. Die Datei “test.php” muß dafür irgendwo unter /var/www liegen, sonst weiß Netbeans nicht wo es suchen soll.
Natürlich kann man auch weiterhin bequem im Browser debuggen, z.B. mit der Easy XDebug Firefox Extension. Ich persönlich finde es sehr viel angenehmer die Debugging-Session manuell zu starten, da Netbeans bei mir für jeden Start und jedes Ende einer Session einen neuen Browsertab geöffnet hat.
Mit der hier vorgestellten Konfiguration lassen sich zusätzlich PHP-CLI Skripte debuggen, und man hat die volle Kontrolle darüber wann und wo eine Debug-Session starten soll.
19. August 2011 §
Nach der Installation und Konfiguration eines Magento Shops möchte man natürlich “jungfräulich” anfangen Bestellungen zu empfangen. Es gibt dafür inzwischen eine Extension, aber ich mache es lieber “per Hand” via SQL Query, getestet unter Magento 1.4.2.x. ACHTUNG: Dadurch werden sämtliche Katalogsuchvorgänge, Bestellungen, Tags, Wunschlisten und “Send to Friend” Einträge unwiderruflich gelöscht. Auf jeden Fall ein aktuelles Backup der Datenabank machen vor dem Ausführen!
-- Reset Magento TEST Data
SET FOREIGN_KEY_CHECKS=0;
-- reset dashboard search queries
TRUNCATE `catalogsearch_query`;
ALTER TABLE `catalogsearch_query` AUTO_INCREMENT=1;
-- reset sales order info
TRUNCATE `sales_flat_creditmemo`;
TRUNCATE `sales_flat_creditmemo_comment`;
TRUNCATE `sales_flat_creditmemo_grid`;
TRUNCATE `sales_flat_creditmemo_item`;
TRUNCATE `sales_flat_invoice`;
TRUNCATE `sales_flat_invoice_comment`;
TRUNCATE `sales_flat_invoice_grid`;
TRUNCATE `sales_flat_invoice_item`;
TRUNCATE `sales_flat_order`;
TRUNCATE `sales_flat_order_address`;
TRUNCATE `sales_flat_order_grid`;
TRUNCATE `sales_flat_order_item`;
TRUNCATE `sales_flat_order_payment`;
TRUNCATE `sales_flat_order_status_history`;
TRUNCATE `sales_flat_quote`;
TRUNCATE `sales_flat_quote_address`;
TRUNCATE `sales_flat_quote_address_item`;
TRUNCATE `sales_flat_quote_item`;
TRUNCATE `sales_flat_quote_item_option`;
TRUNCATE `sales_flat_quote_payment`;
TRUNCATE `sales_flat_quote_shipping_rate`;
TRUNCATE `sales_flat_shipment`;
TRUNCATE `sales_flat_shipment_comment`;
TRUNCATE `sales_flat_shipment_grid`;
TRUNCATE `sales_flat_shipment_item`;
TRUNCATE `sales_flat_shipment_track`;
TRUNCATE `sales_invoiced_aggregated`;
TRUNCATE `sales_invoiced_aggregated_order`;
TRUNCATE `sales_order_aggregated_created`;
TRUNCATE `sendfriend_log`;
TRUNCATE `tag`;
TRUNCATE `tag_relation`;
TRUNCATE `tag_summary`;
TRUNCATE `wishlist`;
TRUNCATE `log_quote`;
TRUNCATE `report_event`;
ALTER TABLE `sales_flat_creditmemo` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_status_history` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item_option` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_shipping_rate` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_track` AUTO_INCREMENT=1;
ALTER TABLE `sales_invoiced_aggregated` AUTO_INCREMENT=1;
ALTER TABLE `sales_invoiced_aggregated_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_aggregated_created` AUTO_INCREMENT=1;
ALTER TABLE `sendfriend_log` AUTO_INCREMENT=1;
ALTER TABLE `tag` AUTO_INCREMENT=1;
ALTER TABLE `tag_relation` AUTO_INCREMENT=1;
ALTER TABLE `tag_summary` AUTO_INCREMENT=1;
ALTER TABLE `wishlist` AUTO_INCREMENT=1;
ALTER TABLE `log_quote` AUTO_INCREMENT=1;
ALTER TABLE `report_event` AUTO_INCREMENT=1;
SET FOREIGN_KEY_CHECKS=1; |
Gefunden im Magento Forum
11. August 2011 §
Bei einem aktuellen Projekt gab es die Anforderung, die identischen Produkte mit gleichen Bruttopreisen wie für Deutschland eingestellt auch in der Schweiz zu verkaufen. Allerdings sollten hier natürlich die 8% für die Schweiz eingerechnet werden.
» Rest des Artikels lesen «
30. Juni 2011 §
Über Magentos ‘Dataflow’ lässt sich eine Menge realisieren. Unter anderem natürlich der Im- und Export von Produktdaten um z.B. Preise zu pflegen. Leider sind die Standard-Filtermöglichkeiten nicht gerade berauschend. Will man z.B. alle Produkte eines Herstellers haben, so gibt es dazu bisher keine Möglichkeit. Ich zeige Ihnen hier wie das geht.
» Rest des Artikels lesen «
13. April 2011 §
Heute wollte ich für meine Projektverwaltung ChiliProject den automatischen Mailabruf konfigurieren. Da ich die Ruby Enterprise Edition nutze um Kontrolle und Geschwindigkeit zu haben, fand der Cronjob leider die gems nicht… der Fehler war
Missing the i18n 0.4.2 gem. Please gem install -v=0.4.2 i18n
und die Lösung war die Angabe des expliziten Gem-Path im Cronjob-Eintrag:
*/5 * * * * WEBUSER cd /pfad/zur/chiliproject/installation/; rake -f Rakefile redmine:email:receive_imap GEM_PATH="/usr/local/lib/ruby/gems/1.8" RAILS_ENV="production" host=imap.domain.com username=mailnutzer password=mailpasswort |
04. Mai 2006 §
Gerade drüber gestolpert. Eine detailierte Anleitung, wie man eine benutzbare Rails-IDE mit Eclipse realisiert.
NAPCS.COM – HOWTO – Setting up a Rails Development Environment on Windows Using Eclipse
Gruß vom eXanto-Team!