Kategoria: Bez kategorii Strona 9 z 23

webox 10.02

Rozbudowa

  • dodano funkcjonalność zmiany zapomnianego hasła
  • dodano możliwość konfiguracji trybu zakładania nowych kont przez użytkowników serwisu
    • czy wymagane jest potwierdzenie wprowadzonego adresu email za pomocą przesłanego kodu
    • czy każdy użytkownik musi zostać manualnie zaakceptowany przez administratora
  • dodano walidatory numerów: NIP i REGON (wykorzystywane w kontach)
  • dodano możliwość wykorzystania SET NAMES ’’ z poziomu pliku konfiguracyjnego
  • wymieniono TinyMCE z 3.2.4.1 na 3.2.7
  • dodano możliwość wyświetlania odnośnika do strony głównej z ścieżki nawigacji (breadcrumb), wraz z konfiguracją
  • dodano możliwość skonfigurowania modułu „galeria obrazów”
  • moduł stronicowania w wyniku daje listę
  • dodno możliwość skonfigurowania listy artykułów
  • poprawiono obsługę typu węzła
  • wymieniono jQuery z wersji 1.3.2 na 1.4.2
  • dodano możliwość asynchronicznego wyświetlania drzewa folderów

Poprawione błędy

  • poprawka w wybieraniu nawigacji po ścieżce, jeżeli ścieżka zawiera slash ( brało ścieżkę tylko do pierwszego slasha )
  • poprawka w działaniu serwera plików związana z niemożnością zmiany folderu
  • poprawka w działaniu serwera plików związana z niemożnością utworzenia folderu
  • poprawka w budowaniu slugów, zostawały znaki myślnika na początku i na końcu stringów
  • sitemap.xml
  • w polu „lastmod” używana była data wytworzenia, a nie modyfikacji
  • poprawka w budowanie menu typu jeden poziom, w przypadku kiedy nie była podawana extra klasa lub id generowany był błędny html
  • poprawka w działaniu modułu „galeria grafik”
  • poprawka sortowania menu w panelu administratora

jak wytresowac programistę, czyli dlaczego testerzy są ważni

Rola testera aplikacji jest rolą straszliwie niedocenianą. W swojej pracy zawodowej przekonałem się, że dobry tester jest wart więcej niż dobry programista i jest od niego da firmy cenniejszy. Może nie widać tego w momencie zatrudniania, bo tester potrzebuje więcej czasu żeby wgryźć się w swoją rolę, ale potem, potem jest z górki.

Parę faktów o testerach znajdziecie w tłumaczeniu Why testers?, którego kawałek jest tutaj: (wiem, że tendencyjny i wyrwany z kontekstu, ale to mój blog i taki cytat mi pasuje).

[…]jeśli odpowiednio długo będziesz twierdził, że tester to tylko niekompetentny programista, w końcu będziesz budował zespół niekompetentnych programistów, a nie zespół kompetentnych testerów.[…]

Pełen artykuł: Po co nam testerzy?

IP użytkownika w tandemie nginx proxy i nginx

Mamy zestaw dwóch serwerów:

  1. nginx – przekazujący ruch do wewnętrznych serwerów (proxy)
  2. nginx – hostujący serwis

Konfiguracja na dla domeny iworks.pl na pierwszym z nich wygląda następująco:

server {
server_name iworks.pl www.iworks.pl;
listen 80;
access_log /var/log/nginx/iworks.pl.access.log;
error_log /var/log/nginx/iworks.pl.error.log;
location / {
proxy_pass ;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

Informacja o prawdziwym IP użytkownika jest przekazywana dalej w linijce: proxy_set_header X-Real-IP $remote_addr;

W celu wykorzystania go na drugim serwerze, tym który hostuje stronę, należy w pliku /etc/nginx/fastcgi_params

Zmienić linijkę
fastcgi_param REMOTE_ADDR $remote_addr;
na
fastcgi_param REMOTE_ADDR $http_x_real_ip;
dzięki czemu na serwerze hostującym adres użytkownika oglądającego stronę będzie „prawdziwy”, zamiast być adresem serwera proxującego.

royalisci.pl - serwis oparty na silniku wordpress

royaliści.pl

Celem wdrożenia było utworzenie wizytówki motocyklowej wyprawy do Indii, która rozpocznie się w połowie marca 2010. Jako silnika strony użyto popularnego systemu do blogowania, czyli wordpress’a, który pozwolił na zaimplementowanie wszystkich potrzebnych funkcjonalności.

Uczestnicy wyprawy będą w miarę możliwości będą tworzyć w drodze wpisy relacjonujące przygody. Serwis, za pomocą odpowiednich wtyczek, został zintegrowany z serwisami społecznościowym facebook oraz z platformami mikroblogowymi: twitter i blip.

adres:
royalisci.pl
rodzaj
witryna informacyjna, serwis blogowy
oprogramowanie
wordpress
cel
utworzenie dziennika wyprawy do Indii
zakres prac
utworzenie szablonu wordpress’a, instalacja i konfiguracja serwisu, dobór wtyczek

wordpress i nginx w jednym miejscu stali

Przenoszę serwisy z jednego serwera na drugi i na tym drugim z założenia ma nie być apache’a. na pierwszy ogień poszedł najmniejszy z wordpressów, taki którego można by przenieść nawet ręcznie. Kilka wpisów na krzyż, kilka wtyczek i tworzony wciąż szablon wyglądu.

Na pierwszy ogień przeszła przeprowadzka bazy, więc dump z bazy mysql (systemowa baza serwera) w celu wyciągnięcia danych z tabel db oraz user oraz przerzucenie dwóch rekordów do nowej bazy. Potem CREATE DATABASE nazwa; i import dumpa.

Sama konfiguracja wirtuala to moment, choć sposób wykorzystania php w trybie cgi wymaga własnego wpisu, poszła bez kłopotu.

Do typowej konfiguracji musiałem dodać tylko wpisy dotyczące kodowania i zmienić index katalogu na index.php.

Ponieważ odnośniki są ustawione jako /%postname%/ wymagane jest użycie reguł rewrite’ów, które dla apache’a są tworzone z automatu.

Dla nginx’a wygląda to następująco:

location / {
    root   /ścieżka_do_document_roota;
    if (-e $request_filename) {
        break;
    }
    rewrite ^(.+)$ /index.php?q=$1 last;
}

WordPress – kłopot z permlinkiem

promotivls zapytał na blipie:

Zmieniłem ustawienia stałych linków i teraz mam w całym serwisie error 403. Jak przywrócić domyślne ustawienia

Na czym polega problem?

Ustawienie budowy odnośników na inną opcję niż domyślna powoduje, że serwis musi mieć prawidłowo skonfigurowane reguły „rewrite”, które są odpowiedzialne za przepisywanie adresu na taki, który będzie zrozumiały dla wordpressa.

Domyślnie wordpress ma plik .htaccess skonfigurowany dla serwera apache’a i wygląda on następująco:

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

i sumarycznie działa tak, że jeżeli nie istnieje plik lub katalog o który pytamy to całość zostaje skierowana do pliku /index.php – a to co tam się dzieje z danymi zależy już od wordpress’a.

Aby całość działała serwer apache’a musi mieć załadowany moduł mod_rewrite oraz być tak skonfigurowany, żeby pozwalał na definiowanie reguł przez serwis, czyli opcja AllowOverride ustawiona na All (domyślne ustawienie).

rozwiązanie

Rozwiązaniem jest skasowanie wartość permalink_structure z tabeli opcji (domyślnie) wp_options.
UPDATE wp_options SET option_value = NULL WHERE option_name = 'permalink_structure';
Oraz skasowanie wytworzonego pliku .htaccess

Jak wpisać dane ftp/ssh w wordpress

Denerwuje cię ciągłe wpisywanie danych FTP w czasie aktualizacji wordpress? Możesz tego uniknąć i wpisać dane na stałe do pliku wp-config.php.

W zależności od sposobu dostępu wypełniamy odpowiednie pola. Przy używaniu klucza ssh należy pamiętać, żeby wygenerowany klucz nie miał hasła, bo nie będzie działać.

Jeżeli mamy do konta dostęp przez FTP i łączymy się za pomocą tego samego serwera, to wystarczy wypełnić 2 opcje FTP_USERFTP_PASS. WordPress przestanie się wtedy pytać o dane do logowania.

define('FTP_USER', 'nazwa użytkownika');
define('FTP_PASS', 'hasło użytkownika');

Mamy do wyboru następujące pola”

  • FS_METHOD – ustawia sposób połączenia, dostępne opcje: „direct”, „ssh”, „ftpext”, „ftpsockets”.
  • FTP_BASE – pełna ścieżka do instalcji wordpresa do katalogu głównego.
  • FTP_CONTENT_DIR – pełna ścieżka do katalogu wp-content.
  • FTP_PLUGIN_DIR – pełna ścieżka do katalogu plugins.
  • FTP_PUBKEY– ścieżka do klucza publicznego (ssh).
  • FTP_PRIKEY– ścieżka do klucza prywatnego.
  • FTP_USER – nazwa użytkownika do połączenia, zarówno dla ftp i ssh.
  • FTP_PASS– hasło.
  • FTP_HOST – zapisywany jako nazwa_hosta:port dla serwera SSH/FTP. Używać jeżeli serwer oferuje te usługi na nietypowych portach lub innej domenie.
is the full path to the plugins folder of the WordPress installation.

Call to undefined method stdClass

Przesiadłem się z laptopa na komp stacjonarny. Poszedł standardowy svn update plus konfiguracja virtuala. Potem restart apache’a i do pracy. Niestety nie do końca, bo przywitał mnie następujący komunikat:

Fatal error: Call to undefined method stdClass::IsConnected() in /home/illi/***/trunk/etc/init.inc.php on line 42

WTF!?

Dla porządku: php + postgresql, połączenie do bazy przez adodb_light.

Przyczyna błędu? Brak bazy :D Co mało ciekawe taki błąd występuje w wielu rodzajach softu i nie do końca wyniki z googla były pomocne, ba … wcale nie były. Tak to jest jak obiekt jakiejś klasy jest inicjalizowany przez funkcję spoza klasy, która sama w sobie nie ma obsługi poprawności inicjalizowanego obiektu.

http i https oraz upierdliwość firefoxa

Firefox ma fajną historię. Bardzo fajną i podpowiadającą, co pewnie nie jest żadnym halo, bo większość przeglądarek pewnie to ma. Innych przeglądarek niż FF używam tylko w końcowych testach tworzenia strony. Ale do rzeczy.

Korzystałem z jednego wiki, które w pewnym momencie zostało przestawione na https, co samo w sobie byłoby bez znaczenia, oprócz tego, że FF pamiętał ten adres i nijak nie chciał zapamiętać nowego. Pewnie dlatego, że i tak odwiedzałem uzupełnioną stronę, na której witał mnie standardowy błąd.

Rozwiązaniem, które podpowiedział mi depesz jest wyczyszczenie pamięci FF, a ponieważ do trzymania historii używa on SQLite’a to procedura jest bardzo prosta.

Po pierwsze należy wyłączyć firefoxa :D.

Potem łączenie:

sqlite3 places.sqlite

Oraz kasowanie upierdliwego wpisu:

DELETE FROM moz_places WHERE url LIKE 'http://adres%';

Pełen opis tabel i nie tylko znajdziesz tutaj:

IP.Board i uszkodzony index

Jest sobie forum postawione na IP.Board, który jest prawie idealny. Prawie, ponieważ używa mysql’a zamiast postgresql’q. Gdyby używał tego ostatniego były perfekcyjny.

Tabela posts używa inno db, o którym im więcej wiem, tym bardziej mam go dość. No ale wracając.

Z cron’a chodzą sobie backupy baz danych, między innymi mysqldump, który od kilku dni (niestety) wywalał się z następującym komunikatem:

mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `ibf_posts` at row: 111598
mysqldump: Got error: 2002: Can't connect to local MySQL server through socket

Co w logach widziane było tak: (zresztą select count(*) from ibf_posts, skutkowało tym samym błędem)

InnoDB: Page checksum 396689542, prior-to-4.0.14-form checksum 4074025863 stored checksum 4054066906, prior-to-4.0.14-form stored checksum 1768235130
Page may be an index page where index id is 0 6702
Database page corruption on disk or a failed file read of page 400.
You may have to recover from a backup.
It is also possible that your operating system has corrupted its own file cache and rebooting your computer removes the error.
If the corrupt page is an index page you can also try to fix the corruption by dumping, dropping, and reimporting the corrupt table. You can use CHECK TABLE to scan your table for corruption.
See also InnoDB: about forcing recovery.
Ending processing because of a corrupt database page.
Number of processes running now: 0
restarted

Strona polecana przez logi jest ok, poza tym, że procedura tam opisana do niczego nie prowadzi. Mimo:
InnoDB: !!! innodb_force_recovery is set to 4 !!!
Skończyło się propozycją wysłania stack trace’a, zgodnie zkolejną opisaną procedurą: http://dev.mysql.com/doc/mysql/en/using-stack-trace.html

Mam to w nosie.

A ponieważ cała baza i tak działa (aktualnie backupuje się co godzina katalog /var/lib/mysql i jest spokój.)

W sumie trzeba mi było od razu zastosować się do procedury opisanej na pierwszej polecanej stronie. Czyli skopiować dane, wywalić tabelę, założyć tabelę, przywrócić dane.

W sumie wygląda prosto, ale … nie miałem jak wykonać dumpa, co gorzej większość zapytań korzystających z całych kluczy wywalało się. Całe szczęście dało się wyciągnąć z całej tabeli pole pid, które jest kluczem głównym tej tabeli.

Mając to pole, mogłem wyciągnąć dane po kolei i zapisać je sobie na boczku, potem już łatwo: skasować tabelę, załadować (bez kluczy) wgrać dane i zapiąć klucze.

W czasie pracy powstały następujące pliki:

  • read.pl – czyta dane z bazy
  • write.pl – zapisuje do bazy dane z pliku
  • ifb_posts.sql – kasuje
  • ifb_posts_keys.sql

Które można sobie pobrać tutaj: ip.board.posts.tar.bz2

Na koniec warto wykonać:

OPTIMIZE TABLE ibf_posts;

Z ciekawostek w czasie pracy:

Dla niektórych zapytań pojawiał się następujący błąd: ERROR 1030 (HY000): Got error -1 from storage engine co doprowadziło do przeczytania wątku na stronie mysql’a: http://bugs.mysql.com/bug.php?id=30225 który mnie po prostu rozbawił, jako że nie uznano tego błędu za błąd, a receptą była aktualizacja. Słabo?

Strona 9 z 23

Oparte na WordPress & Theme by Anders Norén