Posted on

WordPress on Azure: Error establishing a database connection

You have a WordPress site hosted on Microsoft Azure.Perhaps your site is part of a free or shared app service plan.

Trying to connect to the site, one day, you have this wordpress error message:  Error establishing a database connection

How to find out and solve the problem?

Connecting  to Microsoft Azure Service with FTP

First of all you have to connect to the site via ftp to understand where the error is. We can connect to Azure web application with FTP also. In the Overview section of the your Azure web application, select “Get publish profile”. It will download a file that has a lot of things and teh details about FTP username and password, which is constant and can be used for FTP connection.

Enable WordPress Debug Logging

You need FTP connection to  enable WordPress Debug Logging. To enable error logging in WordPress, you will have to make both of the following changes :

  1. In wwwroot directory, create a file named .user.ini Add the following line:log_errors=on
  2. In wwwroot directory, open wp-config.php
    Add the following lines  :

//Enable WP_DEBUG mode
define('WP_DEBUG', true);

//Enable Debug Logging to /wp-content/debug.log
define('WP_DEBUG_LOG', true);

//Supress errors and warnings to screen
define('WP_DEBUG_DISPLAY', false);

//Supress PHP errors to screen
ini_set('display_errors', 0);

Also comment the line :

    /* define('WP_DEBUG', false); */

Analyze the Log File

Try to load your site. Now, through ftp, you can enter in the directoy LogFiles and analyze the file

php_errors.log

Database error

Perhaps you have a database error, for example a duplicate key problem. On azure, in your app service, select Mysql In -app button. On the top of the section, you can see the Manage button. Click on the button and you’ll load the phpMyAdmin portal on your local Mysql DB.

Duplicate entry

If you have this kind of error : Duplicate entry ‘XXXXX’ for key ‘PRIMARY’ for the  query INSERT INTO `table_name`, just ran following command :

REPAIR TABLE table_name

That’s it! It was done.

Posted on Lascia un commento

ASP.NET MVC : ACCESSO AI DATI

ApplicationDbContext

Nell’articolo precedente abbiamo introdotto la classe ApplicationDbContext.

Cercatela nel progetto. Dovreste trovarla all’interno del file IdentityModels.cs. Questa classe deriva dalla classe IdentityDbContext che a sua volta deriva da DbContext.

DbContext è la classe di accesso ad un database. Il costruttore della classe ha come parametro il nome della stringa di connessione che avevamo precedentemente trovato nel file Web.config.

public ApplicationDbContext() : base("DefaultConnection")
 {
 }

Soffermiamoci su questa informazione : nel Web.config potete inserire più stringhe di connessione e quindi testare l’applicazione su database diversi, cambiando il parametro qui sopra, oppure creare una applicazione che si connette a diversi database definendo più di un DbContext.

All’interno di un DbContext dovranno essere referenziate tutte le tabelle del database che vogliamo usare nella nostra applicazione: o meglio, tutte le tabelle che hanno dei vincoli tra loro.

Se per esempio volessimo legare alla tabella degli utenti creata da Visual Studio, una seconda tabella creata da noi, le 2 tabelle dovrebbero fare parte dello stesso DbContext. Ma noi non sappiamo niente delle tabelle per la gestione degli utenti create in automatico. La classe IdentityDbContext contiene i riferimenti a queste tabelle. Per questo motivo il nostro ApplicationDbContext non deriva da DbContext ma da IdentityDBContext che contiene, appunto, qualche informazione in più.

Mano a mano che aggiungerete tabelle alla applicazione andrete a lavorare sulla classe ApplicationDbContext. Per rendere il codice più ordinato, nella directory Models andate a creare un nuovo file ApplicationDbContext.cs e copiate in questa classe il codice di ApplicationDbContext (solo quello) che era presente in IdentityModels.cs.

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
 {
     public ApplicationDbContext()
     : base("DefaultConnection")
     {
     }

     public static ApplicationDbContext Create()
     {
       return new ApplicationDbContext();
     }
 }

Provate a lanciare l’applicazione ed ad effettuare un login per testare che tutto funzioni.

 

Posted on Lascia un commento

ORACLE E TERMINAL SERVER

Quando create un nuovo database Oracle potreste incappare nell’errore ORA-12560: TNS:protocol adapter error. Se avete fatto tutti i controlli del caso (per esempio il SID o il servizio di Oracle) e non avete trovato la soluzione, probabilmente è perchè state creando il database collegati in terminal server. Dovete farlo dalla console fisica (o virtuale).