OK, so you've integrated your Drupal install with Salesforce and are able to pull data from Salesforce into Drupal. Everything's working perfectly, right? Well, if you're like me, then probably not. I noticed right away that I was running into and issue where Drupal was not updating records from Salesforce. In this tutorial, we're going to troubleshoot the issue and implement a solution using by checking the salesforce_pull SystemQueue.
Check The salesforce_pull SystemQueue
Most likely the problem is that you have a huge queue that can't complete during a normal cron run. What's happening is that the data is being pulled from Salesforce into Drupal, but it's not actually being processed. It's just sitting in a queue that can't complete.
The first thing you need to do when Salesforce is not updating records in Drupal is to check the SystemQueue. Run the following drush command to check the SystemQueue, specifically looking for salesforce_pull.
Once you run the above command, look for the following output:
salesforce_pull 1234 SystemQueue
If you get 0 for saleforce_pull, that means everything is up to date. If this is the case, and you're positive that records are not updating, make sure you've integrated your Drupal install with Salesforce and are able to pull data from Salesforce into Drupal.
Finally, if you're confident you're integrated with Salesforce, you might want to delete the salesforce_pull_last_sync variable and run cron. Run the following command to delete the salesforce_pull_last_sync variable.
drush vdel salesforce
You will see an output similar to below. Enter the number that corresponds with the salesforce_pull_last_sync variable you wish to delete. If you're mapping more than one Salesforce Object, there will be more than one salesforce_pull_last_sync variable.
Enter a number to choose which variable to delete.  : Cancel  : salesforce_consumer_key  : salesforce_consumer_secret  : salesforce_endpoint  : salesforce_identity  : salesforce_instance_url  : salesforce_pull_last_sync_Contact  : salesforce_refresh_token
Finally, run cron.
Using Queue UI
If you don't have drush installed on you're server, the above steps won't be much help. Luckily there's the Queue UI module, which allows you to check the status of SystemQueues as well as run cron or batch process them.
- Install and enable the Queue UI module.
- Navigate to admin/config/system/queue-ui
- Select salesforce_pull
- Click Batch process
However, even if you hit Batch process you still might not be able to process the whole queue because of a 504 Gateway Timeout.
504 Gateway Timeout Solution
For me, the main reason I was getting a huge queue that could never process was because I was running into timeouts. Depending on your server configuration, there are several ways to fix this. In my case, I needed to update my /etc/nginx/nginx.conf file and add the following line:
I also adjusted the following setting in my php.ini file.
Once I increase these values to 3600 (3,600 seconds equals 1 hour), I was able to run through my salesforce_pull SystemQueue.