DRUPAL 8.7 ERROR The taxonomy_term.XXXX field must be updated - drupal-8

I tried to run drush entity update but from version 8.7 it doesn't work.
Drupal Version: 8.9.1
PHP Version: 7.3.7
Database Version: 5.6.48-log Sistema
MySQL, MariaDB, Percona Server, o equivalenti
Error:
definitions entity / field
Mismatching of entity and / or field definitions
The following changes were noted in the entity and field type definitions.
Taxonomy term
The taxonomy_term.field_catalogo_pdf field must be updated.
The taxonomy_term.field_categoria_subtitol field must be updated.
The taxonomy_term.field_coll_img field needs to be updated.

Install the Devel Entity Updates contributed module and run the following commands:
$ drush en devel_entity_updates -y
$ drush entup -y

Related

How to fix You have requested a non-existent service 'database.replica_kill_switch'

I was trying to export a drupal site to local, and while doing "drush cr" iam receiving the following error 'You have requested a non-existent service "database.replica_kill_switch"', How to fix this?
I found this error in an installation previous to 8.7.x, while updating to 8.8.x. this "database.replica_kill_switch" doesn't exist before 8.7.x. Maybe you have some module only compatible with 8.7.x and greater.
I solved my error, not sure if it applies to your case, with the following commands:
composer update
drush updatedb
# ignore if drush cr fails
drush cr
# make sure your composer.json requires twig/twig:^1.38.2
vi composer.json
composer update twig/twig
composer require drupal/core:8.7 --update-with-dependencies
drush updatedb
drush cr

Composer outdated shows drupal/core has a newer version, but composer update says "nothing to update"

This is similar to an unanswered question from a year ago. Supposedly I have an update for drupal/core:
$ composer outdated "drupal/*"
drupal/core 8.6.10 8.6.12 Drupal is an open source content ...
But when I run update ...
$ composer update drupal/core --with-dependencies
Dependency "asm89/stack-cors" is also a root requirement, but is not explicitly whitelisted. Ignoring.
Dependency "composer/semver" is also a root requirement, but is not explicitly whitelisted. Ignoring.
[ ... ]
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Generating autoload files
> Drupal\Core\Composer\Composer::preAutoloadDump
> Drupal\Core\Composer\Composer::ensureHtaccess
I'm trying to follow the instructions to update drupal 8 via composer found here: https://www.drupal.org/docs/8/update/update-core-via-composer
I had the same issue today with updating Drupal and the following process helped me solve the issue.
Run the composer update command using the specific version you are trying to update to. In this instance it would be composer require drupal/core:8.6.12 --update-with-dependencies If there is an issue blocking the update this should show you a list of problems. in my case I tried to update to version 8.6.11 and it output the following.
Problem 1
. Installation request for drupal/core 8.6.11 -> satisfiable by
drupal/core[8.6.11].
. Can only install one of: twig/twig[1.x-dev, v1.35.3].
. Can only install one of: twig/twig[v1.35.3, 1.x-dev].
. Can only install one of: twig/twig[1.x-dev, v1.35.3].
. drupal/core 8.6.11 requires twig/twig ^1.38.2 -> satisfiable by
twig/twig[1.x-dev, v1.38.2].
. Conclusion: don't install twig/twig v1.38.2
. Installation request for twig/twig (locked at v1.35.3, required as
^1.35.0) -> satisfiable by twig/twig[v1.35.3].
If there is no problem listed try clearing the composer cache composer clearcache and then try the update command again.
you can also try running the why-not composer command to see if that highlights any issues composer why-not drupal/core:8.6.12
In my case the issue was that the twig component required for 8.6.12 was v1.38.2 but was capped at a lower version 1.35 in the composer file. I used the following command to update the twig version and that allowed me to update to Drupal 8.6.12 using my normal update process.
composer require twig/twig:1.35.2
I hope this helps.

How do i use ansible modules in preview?

I am trying to use the elb_target_group and elb_application_lb modules which according to the doc website states New in version 2.4 and current ansible version is 2.3
So how do i use these modules in preview mode?
When i add them to my playbook and try to run i get the following
ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path.
- elb_target_group:
^ here
Any help will be appreciated.
There is no "preview mode". You need to install appropriate Ansible version. The instructions for installing from the GitHub repository are published here:
To install from source, clone the Ansible git repository:
$ git clone git://github.com/ansible/ansible.git --recursive
$ cd ./ansible
$ source ./hacking/env-setup
On top of that, you seem to be lacking a colon after module's name.

Symfony 2 and Multiple databases with config.yml settings

I have a problem in Symfony 2.3 specifically, where I need to generate schema and update it, access tables in 2 differents databases. Both are in MySQL.
How to Work with multiple Entity Managers and Connections doesn't fix to the scenario, even it's recommended in some articles around.
Errors:
[RuntimeException]
Bundle "XyzBundle" does not contain any mapped entities.
Commands:
doctrine:generate entities XyzBundle --no-backup
doctrine:schema:update --force --em=payment
#/app/config/config.yml
doctrine:
#... connections (default, payment, etc.)
orm:
default_entity_manager: default
auto_generate_proxy_classes: "%kernel.debug%"
entity_managers:
default:
connection: default
mappings:
MyBundle: ~
payment:
connection: payment
mappings:
ZkPaymentBundle: ~
First, I found these excellent articles, where many configurations forms are mentioned.
Doctrine ORM
Install Gedmo Doctrine2 extensions in Symfony2
Even when the bundle isn't in 'vendor/' dir, it was necessary assume that was an external one.
#/app/config/config.yml
payment:
connection: payment
mappings:
XyzBundle:
type: annotation
prefix: Xyz\XyzBundle\Entity
dir: "%kernel.root_dir%/../src/Xyz/XyzBundle/Entity"
Commands
doctrine:generate:entities Xyz/XyzBundle/Entity --no-backup
doctrine:schema:update --force --em=payment
I hope it saves a lot of wasted time.

Where is data_directory for homebrew? or for postgresql or how do I solve error, ""global/pg_filenode.map": No such file or directory"?

I'm having difficulty with postgresql after installing via homebrew. I'm on Mac OS X 10.9.5 (just updated today and did restart).
Note I didn't deliberately change anything from a default postgresql installation via homebrew
PROBLEM
I can't uninstall postgresql
I can't log in to view tables / start the "command line" of postgres
createdb returns an error about pg_filenode.map "no such file or directory"
initdb returns error wondering where data_directory is (I don't know)
ANY OF THESE WOULD BE SUCCESS
Log in to psql (so I can create a database or table like I can do in mysql, browse existing tables)
Uninstall postgres altogether (so I can re-try with postgresql.app)
I've spent almost 10 hours troubleshooting this and come up short.
I've looked at loads of answers already (including SO questions 24132418 and 14510237) though I can't include all links due to not having reputation points yet
Any pointers would be really appreciated!
Below seems lengthy because I have pasted all the logs, please let me know if I have missed some important info though
Thanks, -Mark
DETAILS
I have been working my way through an introduction to Heroku, and they said installing postgresql was a requirment, so I did that using homebrew
brew install postgresql
I didn't check it, I proceeded building my app, but the next day I run the webapp locally and get error,
Request URL: http://localhost:5000/admin/
Django Version: 1.6.5
Exception Type: OperationalError
Exception Value:
FATAL: could not open relation mapping file "global/pg_filenode.map": No such file or directory
Exception Location: /Users/macuser/Dropbox/code/heroku/awe01/lib/python2.7/site-packages/psycopg2/__init__.py in connect, line 164
So I want to investigate.
Now I've never used postgresql before, so I want to "get to the command line" for postgresql
Please note, I'm a complete newbie and have never used postgresql before.
In mysql I know this would be
mysql -u root -p
(and then enter password)
I'm unable to do the equivalent in postgresql
moriartymacbookair13:~ macuser$ postgres
postgres does not know where to find the server configuration file.
You must specify the --config-file or -D invocation option or set the PGDATA environment variable.
moriartymacbookair13:~ macuser$ postgres -V
postgres (PostgreSQL) 9.3.5
The more detailed heroku docs recommend installing postgresql using postgres.app
I hadn't done this, I used homebrew, so I tried uninstalling postgresql
moriartymacbookair13:~ macuser$ brew uninstall postgres
Uninstalling /usr/local/Cellar/postgresql/9.3.5_1...
Error: Permission denied - /usr/local/bin/clusterdb
That didn't work, so back to where I was. To figure out what path to specify, I ran
brew info postgresql
If you scroll down to the bottom of this, you can see it advises me of the path
moriartymacbookair13:~ macuser$ brew info postgres
postgresql: stable 9.3.5 (bottled), devel 9.4beta2
http://www.postgresql.org/
Conflicts with: postgres-xc
/usr/local/Cellar/postgresql/9.3.5_1 (2927 files, 38M) *
Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/postgresql.rb
==> Dependencies
Required: openssl ✔, readline ✔
Recommended: ossp-uuid ✔
==> Options
--32-bit
Build 32-bit only
--enable-dtrace
Build with DTrace support
--no-perl
Build without Perl support
--no-tcl
Build without Tcl support
--with-python
Build with python support
--without-ossp-uuid
Build without ossp-uuid support
--devel
install development version 9.4beta2
==> Caveats
If builds of PostgreSQL 9 are failing and you have version 8.x installed,
you may need to remove the previous version first. See:
https://github.com/Homebrew/homebrew/issues/issue/2510
To migrate existing data from a previous major version (pre-9.3) of PostgreSQL, see:
http://www.postgresql.org/docs/9.3/static/upgrading.html
When installing the postgres gem, including ARCHFLAGS is recommended:
ARCHFLAGS="-arch x86_64" gem install pg
To install gems without sudo, see the Homebrew wiki.
To reload postgresql after an upgrade:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Or, if you don't want/need launchctl, you can just run:
postgres -D /usr/local/var/postgres
Note: I have ignored the comment at the top:
Conflicts with: postgres-xc
/usr/local/Cellar/postgresql/9.3.5_1 (2927 files, 38M) *
Anyway there we have it, toward the end of that large output it confirms the path for me is /usr/local/var/postgres, so I tried -D
moriartymacbookair13:~ macuser$ postgres -D /usr/local/postgres
postgres cannot access the server configuration file "/usr/local/postgres/postgresql.conf": No such file or directory
So this time I specified the config file:
moriartymacbookair13:~ macuser$ postgres --config-file=/usr/local/var/postgres/postgresql.conf
postgres does not know where to find the database system data.
This can be specified as "data_directory" in "/usr/local/var/postgres/postgresql.conf", or by the -D invocation option, or by the PGDATA environment variable.
(Out of desperation, I even tried deleting it and going again)
moriartymacbookair13:~ macuser$ initdb /usr/local/var/postgres
The files belonging to this database system will be owned by user "macuser".
This user must also own the server process.
The database cluster will be initialized with locale "en_GB.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
initdb: directory "/usr/local/var/postgres" exists but is not empty
If you want to create a new database system, either remove or empty
the directory "/usr/local/var/postgres" or run initdb
with an argument other than "/usr/local/var/postgres".
moriartymacbookair13:~ macuser$ rm -rf /usr/local/var/postgres
moriartymacbookair13:~ macuser$ initdb /usr/local/var/postgres -E utf8
The files belonging to this database system will be owned by user "macuser".
This user must also own the server process.
The database cluster will be initialized with locale "en_GB.UTF-8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
creating directory /usr/local/var/postgres ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
creating configuration files ... ok
creating template1 database in /usr/local/var/postgres/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating collations ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
loading PL/pgSQL server-side language ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok
syncing data to disk ... ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
postgres -D /usr/local/var/postgres
or
pg_ctl -D /usr/local/var/postgres -l logfile start
moriartymacbookair13:~ macuser$ postgres -D /usr/local/postgres
postgres cannot access the server configuration file "/usr/local/postgres/postgresql.conf": No such file or directory
moriartymacbookair13:~ macuser$ postgres --config-file=/usr/local/var/postgres/postgresql.conf
postgres does not know where to find the database system data.
This can be specified as "data_directory" in "/usr/local/var/postgres/postgresql.conf", or by the -D invocation option, or by the PGDATA environment variable.
So I took a look at that file:
In that in the conf file itself, the data variable is not defined
moriartymacbookair13:~ macuser$ ls /usr/local/var/postgres/
PG_VERSION pg_ident.conf pg_stat/ pg_xlog/
base/ pg_multixact/ pg_stat_tmp/ postgresql.conf
global/ pg_notify/ pg_subtrans/
pg_clog/ pg_serial/ pg_tblspc/
pg_hba.conf pg_snapshots/ pg_twophase/
moriartymacbookair13:~ macuser$ vim /usr/local/var/postgres/postgresql.conf
shows that the value is commented out (see line 41... almost the whole file is commented out)
35 # FILE LOCATIONS
36 #----------------------------------------------------------------------------- -
37
38 # The default values of these variables are driven from the -D command-line
39 # option or PGDATA environment variable, represented here as ConfigDir.
40
41 #data_directory = 'ConfigDir' # use data in another directory
42 # (change requires restart)
43 #hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file
44 # (change requires restart)
45 #ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file
46 # (change requires restart)
47
48 # If external_pid_file is not explicitly set, no extra PID file is written.
49 #external_pid_file = '' # write an extra PID file
50 # (change requires restart)
HELP: DOES ANYONE KNOW WHAT I SHOULD SPECIFY THAT 'ConfigDir' AS for where data_directory is?
In case helpful
here are contents of the Cellar folder
moriartymacbookair13:~ macuser$ ls /usr/local/Cellar/postgresql/9.3.5_1/
COPYRIGHT homebrew.mxcl.postgresql.plist
HISTORY include/
INSTALL_RECEIPT.json lib/
README share/
bin/
(I don't understand why I have some postgres files in Cellar and some in usr/local/var)
I tried some other things too:
moriartymacbookair13:~ macuser$ sudo -u postgres pg_ctl -D /usr/local/var/postgres -w start
sudo: unknown user: postgres
That's based on other SO questions
moriartymacbookair13:~ macuser$ ls -ld /usr/local/var/postgres/
drwx------ 19 macuser admin 646B 20 Sep 19:46 /usr/local/var/postgres//
moriartymacbookair13:~ macuser$ chown -R postgres /usr/local/var/postgres
chown: postgres: illegal user name
moriartymacbookair13:~ macuser$ brew uninstall postgresql
Uninstalling /usr/local/Cellar/postgresql/9.3.5_1...
Error: Permission denied - /usr/local/bin/clusterdb
moriartymacbookair13:~ macuser$ brew uninstall postgres
Uninstalling /usr/local/Cellar/postgresql/9.3.5_1...
Error: Permission denied - /usr/local/bin/clusterdb
moriartymacbookair13:~ macuser$
As I say, I installed Postgresql only to try out heroku, so here is the error Chrome gives me from the code when I run foreman start locally.
(Note "the django app" is just a demo app https://devcenter.heroku.com/articles/getting-started-with-python#prepare-the-app)
It works for localhost:5000 home, but when I add /admin (the page that would interact with a database), I get the following error:
OperationalError at /admin/
FATAL: could not open relation mapping file "global/pg_filenode.map": No such file or directory
Request Method: GET
Request URL: http://localhost:5000/admin/
Django Version: 1.6.5
Exception Location: /Users/macuser/Dropbox/code/heroku/awe01/lib/python2.7/site-packages/psycopg2/__init__.py in connect, line 164
Python Executable: /Users/macuser/Dropbox/code/heroku/awe01/bin/python
Full error traceback log here: http://dpaste.com/3CREGVQ
Note this answer https://stackoverflow.com/a/5053003/870121
recommends createdb not just initdb
And the above error is the same as if I run createdb:
moriartymacbookair13:~ macuser$ createdb /usr/local/var/postgres/
createdb: could not connect to database template1: FATAL: could not open relation mapping file "global/pg_filenode.map": No such file or directory
Steps advised here
Postgres is failing with 'could not open relation mapping file "global/pg_filenode.map" '
are
Remove and re-add the launch agent
Kill the processes for <postgresql version number>
Initialize the db initdb /usr/local/var/postgres
Restart my computer
If this is relevant someone please tell me how to "Remove and re-add the launch agent"?
Is is this? (based on the output of the brew info postgresql from earlier)
moriartymacbookair13:~ macuser$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
moriartymacbookair13:~ macuser$ killall postgresql
No matching processes belonging to you were found
moriartymacbookair13:~ macuser$ killall postgres
No matching processes belonging to you were found
moriartymacbookair13:~ macuser$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
FINALLY
In case it inspires anyone,
moriartymacbookair13:~ macuser$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry and just ignore them. Thanks!
Warning: The /usr/local directory is not writable.
Even if this directory was writable when you installed Homebrew, other
software may change permissions on this directory. Some versions of the
"InstantOn" component of Airfoil are known to do this.
You should probably change the ownership and permissions of /usr/local
back to your user account.
Warning: Unbrewed dylibs were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.
Unexpected dylibs:
/usr/local/lib/libguide.dylib
/usr/local/lib/libKLF_OGL.dylib
Warning: Some directories in your path end in a slash.
Directories in your path should not end in a slash. This can break other
doctor checks. The following directories should be edited:
$/Users/macuser/Dropbox/code/aws/ElasticBeanstalkCommandLineTools/AWS-ElasticBeanstalk-CLI-2.6.3/AWSDevTools.sh/macosx/python2.7/ /Users/macuser/Dropbox/code/aws/ElasticBeanstalkCommandLineTools/AWS-ElasticBeanstalk-CLI-2.6.3/AWSDevTools/eb/macosx/python2.7/
Warning: /usr/bin occurs before /usr/local/bin
This means that system-provided programs will be used instead of those
provided by Homebrew. The following tools exist at both paths:
git
git-cvsserver
git-receive-pack
git-shell
git-upload-archive
git-upload-pack
Consider setting your PATH so that /usr/local/bin
occurs before /usr/bin. Here is a one-liner:
echo export PATH='/usr/local/bin:$PATH' >> ~/.bash_profile
moriartymacbookair13:~ macuser$
Earlier today I had this error
createdb: could not connect to database postgres: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
as per http://www.postgresql.org/docs/9.3/interactive/tutorial-createdb.html
but that error seems to have gone away now
Any advice on un or re-installing postgresql, resolving the unknown user: postgres error, setting location of #data_directory = 'ConfigDir' or any other tips... I would really appreciate it. It's been a full day lost to this now so I would appreciate anything at all.
FATAL: could not open relation mapping file "global/pg_filenode.map": No such file or directory
You had a PostgreSQL install, but deleted or moved the data directory while the server was running. Or you installed it on a removable disk that you then removed. Or some application on your system is messing with how other apps change files.
moriartymacbookair13:~ macuser$ postgres
postgres does not know where to find the server configuration file.
postgres is the server application. The client is psql. However, if global/pg_filenode.map is missing you're not going to have any more luck with psql.
moriartymacbookair13:~ macuser$ brew uninstall postgres
sudo brew uninstall postgres
Anyway there we have it, toward the end of that large output it
confirms the path for me is /usr/local/var/postgres, so I tried -D
moriartymacbookair13:~ macuser$ postgres -D /usr/local/postgres
postgres cannot access the server configuration file "/usr/local/postgres/postgresql.conf": No such file or directory
You got the path wrong. Note what "brew info" said:
Or, if you don't want/need launchctl, you can just run:
postgres -D /usr/local/var/postgres
As for the postgres user:
moriartymacbookair13:~ macuser$ sudo -u postgres pg_ctl -D /usr/local/var/postgres -w start
sudo: unknown user: postgres
I think some Mac OS X installs use _postgres or postgres_. I don't have a mac, so I can't check. But it doesn't matter in your case anyway, because the datadir is owned by your user, not postgres:
moriartymacbookair13:~ macuser$ ls -ld /usr/local/var/postgres/
drwx------ 19 macuser admin 646B 20 Sep 19:46 /usr/local/var/postgres//
It looks to me like you or some tool on your system has mangled your PostgreSQL data directory, corrupting it. This shouldn't happen, so I'd be making an effort to find out what removed pg_filenode.map and how/when.
If there is no data you care about in the data directory, you should delete it and re-initdb.
I don't have a Mac and I can't see how Homebrew configures your PostgreSQL install's startup, but it sounds like it probably runs postgres as user macuser. In which case, just:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm -rf /usr/local/var/postgres
initdb -D /usr/local/var/postgres -U postgres --auth-local peer --auth-host md5 -E utf-8l
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Finally, re:
Note, when I tried to use the postgres.app installer now it told me
"Could not start on Port 5432" and froze during installation
at a guess, when you tried that you had the postgres server from Homebrew already running on 5432, but nonfunctional because of the damaged data directory.
So you really have two things here:
Re-initdb the datadir to get PostgreSQL working again; and
Figure out how it got damaged in the first place
SOLUTION to the problem I posted
sudo brew uninstall postgresql (literally, sudo solved my problem... I had read that sudo brew can be dangerous but it worked well in this case)
Restart
Tried to run postgres.app ...got error
Restart
Fully uninstalled postgres.app (following instructions on site: quit, drag to the Trash, and then "Finder > Empty Trash..." as per http://postgresapp.com/documentation/install.html)
Restart
Delelted data folder as per trouble shooting instructions of postgresapp
i.e., the 5 steps here:
Resetting Postgres.app
http://postgresapp.com/documentation/troubleshooting.html (I may have done this earlier, I forget the order of steps 5/7)
Restart
Re-installed postgresql via postgres.app
Added the path to my /etc/profile file... adding to ~/.bashrc or ~/.bash_profile doesn't work for me for some reason. Here in an
Extract from /etc/profile for me
It might be from another file for you, see https://apple.stackexchange.com/questions/12993/why-doesnt-bashrc-run-automatically#comment13715_13019
# 1:
# For postgresql postgres postgres.app:
# Otherwise psql isn't a recognised command
# Based on http://postgresapp.com/documentation/cli-tools.html
export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.3/bin
# 2:
# And this from https://devcenter.heroku.com/articles/heroku-postgresql#local-setup
export PATH="/Applications/Postgres93.app/Contents/MacOS/bin:$PATH:$PATH"
# 3:
# And now this based on error of file not existing
# from http://stackoverflow.com/questions/13868730/socket-file-var-pgsql-socket-s-pgsql-5432-missing-in-mountain-lion-os-x-ser -- don't think this made a difference though
export PGHOST=localhost
I think this is overkill; the first change is definitely useful as it allows me to go straight to psql just by typing "psql" in terminal (I personally didn't even need -h localhost); I'm less sure of the need of the other two additions
That's it.
HOW IT GOT DAMAGED IN THE FIRST PLACE
I haven't figured this out.
OTHER TIPS FOR ANY MAC USER WHO'S USING DJANGO ON HEROKU WITH POSTGRESQL
In case relevant, now that it's working, here are some more steps I've finished to get fully set up and comfortable with postgres and my new heroku app. This has been my first experience with heroku, django and postgresql so I have tried to note all details which struck me!
Note: I had locally finished the tutorial for the "polls" sample app (from https://docs.djangoproject.com/en/1.6/intro/tutorial01/). My goal was to add this /polls app to the "getting started" django sample app (from https://devcenter.heroku.com/articles/getting-started-with-python)
(Note: I chose django 1.6 since it seems to be the latest version supported by heroku right now.)
I am running Mac OS X 10.9.5 but some of my comments may be helpful for anyone confused about local/heroku postgres integration
Create a local postgres db to use with django app
Once postgres app is running (launched by double-clicking the program in Applications -> Postgres, then look out for the elephant in the notification bar if you're on a Mac), I can log in to psql. But first straight from the command line, I made a database by command
createdb cool01db
Note if you get this,
psql: could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432? or similar error, then you haven't set up the postgres app/server correctly, so don't proceed through my instructions
Now I could log in to psql as per instructions on http://postgresapp.com/documentation/cli-tools.html
psql cool01db
Running the psql command \d shows me they're nothing in this database yet; tables will be created automatically by django when I do my syncdb command
Note: Since I had already completed the polls tutorial elsewhere, I had copied the "polls" folder (which contains things like models.py) into the folder of my heroku sample app, so "polls" was a folder alongside "gettingstarted" and "hello". Therefore I also added "polls" to the list of "installed apps" in the gettingstarted/settings.py as per https://docs.djangoproject.com/en/1.6/intro/tutorial01/#activating-models
I edited the gettingstarted/settings.py file as per instructions on the django tutorial
https://docs.djangoproject.com/en/1.6/intro/tutorial01/#database-setup and https://docs.djangoproject.com/en/1.6/ref/settings/#std:setting-DATABASES
For me, this looked like:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'cool01db',
'USER': '',
'PASSWORD': '',
'HOST': 'localhost', # '127.0.0.1' probably works also
'PORT': '5432',
}
}
To use the newly-created local postgres DB and not the heroku one
I commented out this link in gettingstarted/settings.py
# DATABASES['default'] = dj_database_url.config()
This is as per excellent comment, http://stackoverflow.com/a/16422414/870121
I navigated into the project folder (which contains the above three folders and files like manage.py) and ran (locally, not on heroku) python manage.py syncdb
Here I was prompted to create a superuser with a password
Note, now the tables for the heroku sample app (tables like hello_greeting) and the django polls app (tables like polls_choice and polls_question) are all automatically created in the local postgres db, and I can view them if I log in to psql (psql cool01db from the terminal) and type \d (once you're in)
I ran foreman start and navigated to http://localhost:5000/admin/ and entered my superuser username and password I had just created. This successfully logged me in to the /admin site powered by my LOCAL postgres database
I saw the admin panel with the opportunity to add a Question as per django tutorial, so I added a question with some answers as per https://docs.djangoproject.com/en/1.6/intro/tutorial02/#make-the-poll-app-modifiable-in-the-admin
Now I visited http://localhost:5000/polls and sure enough it was working
If in the terminal I ran psql cool01db and then the sql command \d I could see the tables, and select * from question_choice showed me the updates just made. Very satisfying.
To use the heroku postgres db in development
I uncommented this line in gettingstarted/settings.py
DATABASES['default'] = dj_database_url.config()
I ran heroku config
Knew to do this from https://devcenter.heroku.com/articles/getting-started-with-python#define-config-vars
Output was this:
(awe01)moriartymacbookair13:getstartapp macuser$ heroku config
=== awe01 Config Vars
DATABASE_URL: postgres://aqmorelettersqz:uqry_pnFmorelettersYf#ec2-XX-XXX-XX-XX.compute-1.amazonaws.com:5432/dbmorelettersce
HEROKU_POSTGRESQL_YELLOW_URL: postgres://aqmorelettersqz:uqry_pnFmorelettersYf#ec2-XX-XXX-XXX-XX.compute-1.amazonaws.com:5432/dbmorelettersce
PAPERTRAIL_API_TOKEN: kmorelettersx
TIMES: 2
(awe01)moriartymacbookair13:getstartapp macuser$
Then I pasted all of that into the hidden file .env which lies in the same folder as manage.py
Syntax note: this means the file .env looked like this:
TIMES=2
DATABASE_URL=postgres://aqmorelettersqz:uqry_pnFmorelettersYf#ec2-XX-XXX-XX-XX.compute-1.amazonaws.com:5432/dbmorelettersce
HEROKU_POSTGRESQL_YELLOW_URL=pos.... etc
...i.e., with = signs but no spaces around them (and no comments in this file)
Note, this involved deleting the original "DATABASE_URL=" entry from the .env file
As far as I understand, the .env file is what your local machine sees, but the output of "heroku config" is what the heroku machine sees (corrections welcome), so I wanted them to match.
NB: Once Postgres is installed and you can connect, you’ll need to export the DATABASE_URL environment variable for your app to connect to it when running locally.
Run command export DATABASE_URL=postgres:///$(whoami)
This tells Postgres to connect locally to the database matching your user account name (which is set up as part of installation).
That's from https://devcenter.heroku.com/articles/heroku-postgresql#local-setup
Note (to self): I don't understand what happens here (I can't see a file that's changed as a result of running this, or what exactly happens). But I did a restart of computer and everything still works, I didn't need to run this again.
Now on a heroku dyno I ran "syncdb"
heroku run python manage.py syncdb
(You will be prompted to create a superuser only if you haven't already done so)
I went to myappname.herokuapp.com/admin and logged in with the superuser account created for heroku postgresql (which I have the same as local for convenience). There I was able to add a question, and this time this question is added to the heroku postgresql db. Visiting myappname.herokuapp.com/polls shows me that question available for votes
I think that's it
Now if I do foreman start, what I see at /db or /polls is the same as if I visit my locallhost:5000 or myappname.herokuapp.com, since both are using the heroku postgresdb (I don't even need my postgres server running)
To view tables and run commants like \dt or SELECT * FROM... I can do a command heroku pg:psql as per https://devcenter.heroku.com/articles/getting-started-with-python#provision-a-database
Thanks Craig Ringer for the original answer.