planka
planka copied to clipboard
How to update via Docker?
I keep pulling the 'latest' image from Docker, but I cannot see the latest changes in the project and Docker keeps saying that I have the 'latest' image, even though the image it is pulling has the tag that it was created 2 months ago, instead of 5 days ago, like the latest image here: Docker Hub.
The current latest version is
1.0.0-beta
, so you'll need to pull that image:
docker pull meltyshev/planka:1.0.0-beta
BUT IF YOU WANT TO UPDATE AN EXISTING SETUP
Back up your database! This update features some database structure changes, you'll either need to manually update the database or just start from scratch.
How I updated my database (Linux)
- Get into the planka image:
docker exec -it planka_planka_1 sh
- Change into the db directory and install knex:
cd db && npm install -g knex
- Apply migrations
knex migrate:up 20180721234154_create_project_manager_table.js && knex migrate:up 20180722001747_create_board_membership_table.js
- You should also be able to just do:
knex migrate:latest
, but I haven't tested it - If you get
Error: The migration directory is corrupt
, just do
and try againwget https://raw.githubusercontent.com/plankanban/planka/d6cb1f6683774ffa52012f42b6483a8a93e704d1/server/db/migrations/20180721234154_create_project_membership_table.js -P migrations
- You should also be able to just do:
- Get into the PostgreSQL database, inside the planka_postgres_1 image:
docker exec -it planka_postgres_1 sh && psql --username postgres --dbname planka
- Add board members
- Run
select * from board;
to view information about all boards, thenselect * from user_account;
for viewing all accounts - Insert values about to what board each user has access:
whereinsert into board_membership values (DEFAULT, boardid, userid, NULL, NULL);
boardid
must be replaced with the desired board id, anduserid
- desired user id
- Run
- Transfer
project_membership
data toproject_manager
insert into project_manager (id, project_id, user_id, created_at, updated_at) select id, project_id, user_id, created_at, updated_at from project_membership;
- If you feel like it, you can also remove the
project_membership
table afterwards, since it seems that it's not needed anymore, but it won't to any harm if you leave itdrop table project_membership;
- If you feel like it, you can also remove the
- Update
card
table
wherealter table card add creator_user_id bigint not null default '0';
0
should be replaced by a User's id.- If you want, you can later update the rows
- Update column name of
attachment
tablealter table attachment rename column user_id to creator_user_id;
And everything should be working. If you're getting stuck on loading anywhere, you can check database output messages with:
docker logs planka_postgres_1
Thank you very much. Will try and if anything goes wrong I will post it here.
@Syndamia :
Great ! Should you destroy the containers first and recreate them with the 1.0.0-beta version image and then follow the steps for manual migration or should the manual migration steps be done before switching to new image ?
edit: to answer my own question: it seems you have to stop your running containers, change planka image tag, recreate containers and follow the steps.
Unfortunately it doesn't seem to work. I completed the procedure three times from a back-up and I get the same results: black screen in the browser and no logs from either containers and a lot of javascript error in the browser console.
Edit I revisited my old explanation and my server and I found the original answer out of place.
I also found a mistake (that is now fixed). To check the database output, run this command:
docker logs planka_postgres_1
If you still don't find any info, could you send some of the JavaScript error messages?
@Syndamia : Here's the complete output:
jc@localhost ~/tmp/planka
$ docker exec -it planka_planka_1 sh
/app # cd db && npm install -g knex
added 177 packages in 9s
2 packages are looking for funding
run `npm fund` for details
npm notice
npm notice New patch version of npm available! 7.20.3 -> 7.20.6
npm notice Changelog: https://github.com/npm/cli/releases/tag/v7.20.6
npm notice Run npm install -g [email protected] to update!
npm notice
/app/db # wget https://raw.githubusercontent.com/plankanban/planka/d6cb1f6683774ffa52012f42b6483a8a93e704d1/server/db/migrations/20180721234154_create_project_membership_ta
ble.js -P migrations
Connecting to raw.githubusercontent.com (185.199.111.133:443)
saving to 'migrations/20180721234154_create_project_membership_table.js'
20180721234154_creat 100% |****************************************************************************************************************************| 539 0:00:00 ETA
'migrations/20180721234154_create_project_membership_table.js' saved
/app/db # knex migrate:up 20180721234154_create_project_manager_table.js && knex migrate:up 20180722001747_create_board_membership_table.js
Batch 2 ran the following migrations:
20180721234154_create_project_manager_table.js
Batch 3 ran the following migrations:
20180722001747_create_board_membership_table.js
/app/db # exit
jc@localhost ~/tmp/planka
$ docker exec -it planka_postgres_1 sh
/ # psql --username postgres --dbname planka
psql (13.2)
Type "help" for help.
planka=# insert into board_membership values (DEFAULT, 410087937368130564, 410050284119655425, NULL, NULL);
INSERT 0 1
planka=# insert into board_membership values (DEFAULT, 410206038659171426, 410050284119655425, NULL, NULL);
INSERT 0 1
planka=# insert into board_membership values (DEFAULT, 410129813408318545, 410050284119655425, NULL, NULL);
INSERT 0 1
planka=# insert into board_membership values (DEFAULT, 410104802068923421, 410050284119655425, NULL, NULL);
INSERT 0 1
planka=# insert into board_membership values (DEFAULT, 410127174461293642, 410050284119655425, NULL, NULL);
INSERT 0 1
planka=# insert into board_membership values (DEFAULT, 410213794833237101, 410050284119655425, NULL, NULL);
INSERT 0 1
planka=# insert into board_membership values (DEFAULT, 410218076949185655, 410050284119655425, NULL, NULL);
INSERT 0 1
planka=# insert into board_membership values (DEFAULT, 410229564292203678, 410050284119655425, NULL, NULL);
INSERT 0 1
planka=# insert into board_membership values (DEFAULT, 410286856303805612, 410050284119655425, NULL, NULL);
INSERT 0 1
planka=# insert into board_membership values (DEFAULT, 410287631209858226, 410050284119655425, NULL, NULL);
INSERT 0 1
planka=# insert into board_membership values (DEFAULT, 414922820984767711, 410050284119655425, NULL, NULL);
INSERT 0 1
planka=# insert into board_membership values (DEFAULT, 410119819900224564, 410050284119655425, NULL, NULL);
INSERT 0 1
planka=# insert into board_membership values (DEFAULT, 478909522312693254, 410050284119655425, NULL, NULL);
INSERT 0 1
planka=# insert into project_manager (id, project_id, user_id, created_at, updated_at) select id, project_id, user_id, created_at, updated_at from project_membership;
INSERT 0 2
planka=# alter table card add creator_user_id bigint not null default '410050284119655425';
ALTER TABLE
planka=# alter table attachment rename column user_id to creator_user_id;
ALTER TABLE
planka=# exit
/ # exit
jc@localhost ~/tmp/planka
$ docker-compose restart
Restarting planka_planka_1 ... done
Restarting planka_postgres_1 ... done
jc@localhost ~/tmp/planka
$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------
planka_planka_1 docker-entrypoint.sh bash ... Up 0.0.0.0:3000->1337/tcp
planka_postgres_1 docker-entrypoint.sh postgres Up 5432/tcp
jc@localhost ~/tmp/planka
$ docker-compose logs
Attaching to planka_planka_1, planka_postgres_1
planka_1 | debug: Detected Sails environment is "production", but NODE_ENV is `undefined`.
planka_1 | debug: Automatically setting the NODE_ENV environment variable to "production".
planka_1 | debug:
planka_1 | debug: It looks like your `sails.config.sockets.onlyAllowOrigins` array only includes
planka_1 | debug: references to the `localhost` origin. This is completely valid, but be sure
planka_1 | debug: to add any other origins to this list that you'd like to accept socket
planka_1 | debug: connections from!
planka_1 | debug:
planka_1 | debug: -------------------------------------------------------
planka_1 | debug: :: Thu Aug 19 2021 16:21:49 GMT+0000 (Coordinated Universal Time)
planka_1 | debug: Environment : production
planka_1 | debug: Port : 1337
planka_1 | debug: -------------------------------------------------------
planka_1 | error: Sending 500 ("Server Error") response:
planka_1 | AdapterError: Unexpected error from database adapter: relation "public.project_manager" does not exist
planka_1 | at fn (/app/api/helpers/project-managers/get-many.js:10:27)
planka_1 | at wrapper (/app/node_modules/@sailshq/lodash/lib/index.js:3282:19)
planka_1 | at Deferred.parley.retry [as _handleExec] (/app/node_modules/machine/lib/private/help-build-machine.js:1014:29)
planka_1 | at Deferred.exec (/app/node_modules/parley/lib/private/Deferred.js:286:10)
planka_1 | at Deferred.tryCatcher (/app/node_modules/bluebird/js/release/util.js:11:23)
planka_1 | at ret (eval at makeNodePromisifiedEval (/app/node_modules/bluebird/js/release/promisify.js:184:12), <anonymous>:14:23)
planka_1 | at Deferred.toPromise (/app/node_modules/parley/lib/private/Deferred.js:572:19)
planka_1 | at Deferred.then (/app/node_modules/parley/lib/private/Deferred.js:431:22)
planka_1 | at processTicksAndRejections (internal/process/task_queues.js:95:5)
planka_1 | debug: Detected Sails environment is "production", but NODE_ENV is `undefined`.
planka_1 | debug: Automatically setting the NODE_ENV environment variable to "production".
planka_1 | debug:
planka_1 | debug: It looks like your `sails.config.sockets.onlyAllowOrigins` array only includes
planka_1 | debug: references to the `localhost` origin. This is completely valid, but be sure
planka_1 | debug: to add any other origins to this list that you'd like to accept socket
planka_1 | debug: connections from!
planka_1 | debug:
planka_1 | debug: -------------------------------------------------------
planka_1 | debug: :: Thu Aug 19 2021 16:26:11 GMT+0000 (Coordinated Universal Time)
planka_1 | debug: Environment : production
planka_1 | debug: Port : 1337
planka_1 | debug: -------------------------------------------------------
postgres_1 |
postgres_1 | PostgreSQL Database directory appears to contain a database; Skipping initialization
postgres_1 |
postgres_1 | 2021-08-19 16:21:45.690 UTC [1] LOG: starting PostgreSQL 13.2 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.2.1_pre1) 10.2.1 20201203, 64-bit
postgres_1 | 2021-08-19 16:21:45.690 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
postgres_1 | 2021-08-19 16:21:45.690 UTC [1] LOG: listening on IPv6 address "::", port 5432
postgres_1 | 2021-08-19 16:21:45.699 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres_1 | 2021-08-19 16:21:45.718 UTC [20] LOG: database system was shut down at 2021-08-19 16:21:37 UTC
postgres_1 | 2021-08-19 16:21:45.726 UTC [1] LOG: database system is ready to accept connections
postgres_1 | 2021-08-19 16:21:59.295 UTC [28] ERROR: relation "public.project_manager" does not exist at character 71
postgres_1 | 2021-08-19 16:21:59.295 UTC [28] STATEMENT: select "id", "created_at", "updated_at", "project_id", "user_id" from "public"."project_manager" where "user_id" = $1 order by "id" ASC limit $2
postgres_1 | 2021-08-19 16:25:58.152 UTC [1] LOG: received fast shutdown request
postgres_1 | 2021-08-19 16:25:58.158 UTC [1] LOG: aborting any active transactions
postgres_1 | 2021-08-19 16:25:58.158 UTC [1] LOG: background worker "logical replication launcher" (PID 26) exited with exit code 1
postgres_1 | 2021-08-19 16:25:58.158 UTC [21] LOG: shutting down
postgres_1 | 2021-08-19 16:25:58.210 UTC [1] LOG: database system is shut down
postgres_1 |
postgres_1 | PostgreSQL Database directory appears to contain a database; Skipping initialization
postgres_1 |
postgres_1 | 2021-08-19 16:25:59.142 UTC [1] LOG: starting PostgreSQL 13.2 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.2.1_pre1) 10.2.1 20201203, 64-bit
postgres_1 | 2021-08-19 16:25:59.142 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
postgres_1 | 2021-08-19 16:25:59.142 UTC [1] LOG: listening on IPv6 address "::", port 5432
postgres_1 | 2021-08-19 16:25:59.153 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres_1 | 2021-08-19 16:25:59.165 UTC [20] LOG: database system was shut down at 2021-08-19 16:25:58 UTC
postgres_1 | 2021-08-19 16:25:59.173 UTC [1] LOG: database system is ready to accept connections
I just noticed this line:
postgres_1 | 2021-08-19 16:21:59.295 UTC [28] ERROR: relation "public.project_manager" does not exist at character 71
postgres_1 | 2021-08-19 16:21:59.295 UTC [28] STATEMENT: select "id", "created_at", "updated_at", "project_id", "user_id" from "public"."project_manager" where "user_id" = $1 order by "id" ASC limit $2
And here's the console output:
TypeError: n is null
value User.js:290
value User.js:289
zn user.js:39
Redux 4
nE ProjectsContainer.js:10
Redux 5
React 2
j Redux
React 10
unstable_runWithPriority scheduler.production.min.js:18
React 4
Redux 4
a middleware.js:26
Redux 12
react-dom.production.min.js:216:199
TypeError: n is null
value User.js:290
value User.js:289
zn user.js:39
Redux 4
nE ProjectsContainer.js:10
Redux 5
React 2
j Redux
React 10
unstable_runWithPriority scheduler.production.min.js:18
React 4
Redux 4
a middleware.js:26
Redux 12
io-6de156f3.js:111:10
The above error occurred in task ji
created by Gj
created by Qj
Tasks cancelled due to error:
Gj
Xb
uj
lj
pj
mj
Oj
Ej
xj
Cj
Rj
kj
yj
Nj
Uj
wj
Mj
Bj
Fj
Vj io-6de156f3.js:112:10
I fixed(?) the postgresql error by replacing insert into project_manager (id, project_id, user_id, created_at, updated_at) select id, project_id, user_id, created_at, updated_at from project_membership;
with insert into public.project_manager (id, project_id, user_id, created_at, updated_at) select id, project_id, user_id, created_at, updated_at from project_membership;
but the console javascript errors remain.
edit: and to be perfectly clear, I have backups of every volumes and I restore them and recreate 0.16 containers before each tr and I get a functioning planka populated with my data.
I didn't have any problems with the database update and also had no errors there, but get the same js errors.
I keep pulling the 'latest' image from Docker, but I cannot see the latest changes in the project and Docker keeps saying that I have the 'latest' image, even though the image it is pulling has the tag that it was created 2 months ago, instead of 5 days ago, like the latest image here: Docker Hub.
As a rule of thumb latest
tag should never be used because there are not guarantee it's the actual latest build (or that the build was produced from the most up to date code). The tag label is just a free field without constraints. See https://vsupalov.com/docker-latest-tag/ and https://www.cloudsavvyit.com/10691/understanding-dockers-latest-tag/
What happens is that since you most likely have a local image of Planka tagged with latest
the container is being created from that local image. It doesn't pull out latest
from the web. Remove that image and it will pull latest
from the web. That's why you can never be sure you have the image you think you have if you rely on the latest
tag.
Ok, I created a new database and let planka create the schemes. Then I copied each table from the old database one by one to the new database. When I copy board_membership it results in the js error and the site not loading. Leaving this table out and adding myself to every board on the website seems to work just fine. So it is working for me again.
OK, I was also able to upgrade to planka:1.0.0-beta
from planka:0.1.6
but since @TheFrazer went one way (copying tables data) I decided to go another (updating tables).
If you know your user id here's the SQL query to run. Then login and reclaim ownership of each board:
ALTER TABLE attachment RENAME COLUMN user_id TO creator_user_id;
CREATE TABLE "public"."board_membership" (
"id" bigint DEFAULT next_id() NOT NULL,
"board_id" bigint NOT NULL,
"user_id" bigint NOT NULL,
"created_at" timestamp,
"updated_at" timestamp,
CONSTRAINT "board_membership_board_id_user_id_unique" UNIQUE ("board_id", "user_id"),
CONSTRAINT "board_membership_pkey" PRIMARY KEY ("id")
) WITH (oids = false);
CREATE INDEX "board_membership_user_id_index" ON "public"."board_membership" USING btree ("user_id");
ALTER TABLE card ADD COLUMN "creator_user_id" bigint;
UPDATE card SET creator_user_id=410050284119655425;
ALTER TABLE card ALTER COLUMN creator_user_id SET NOT NULL;
ALTER TABLE project_membership RENAME TO project_manager;
DROP INDEX "project_membership_user_id_index";
CREATE INDEX "project_manager_user_id_index" ON "public"."project_manager" USING btree ("user_id");
ALTER TABLE project_manager RENAME CONSTRAINT project_membership_pkey TO project_manager_pkey;
ALTER TABLE project_manager RENAME CONSTRAINT project_membership_project_id_user_id_unique TO project_manager_project_id_user_id_unique;
Those steps are for when only one user created projects and cards. It's possible to adapt but you most likely may have to manually update ownership of cards, boards and projects. Either through Planka's web UI (easy but can take some time) or through SQL (harder but can be processed in batches).
On a running docker setup:
- Stop and remove the planka container:
$ docker-compose stop planka ; docker-compose rm planka;
- I am using
adminer
http://localhost:3001 out of convenience but you could run an SQL file as an input query to the database server from the postgres container just as easily.
Add the following to the docker-compose.yml
that ships with Planka (user:postgres, password: postgres, server:postgres
) :
adminer:
image: adminer:4.8.1-standalone
ports:
- 3001:8080
and run
$ docker-compose up -d adminer
- Get your user id with this query:
SELECT id, username, name, email FROM user_account;
-- SELECT id, username, name, email FROM user_account WHERE username=johnchristopher;
- Run this query and modify this line
UPDATE card SET creator_user_id=
with the user id you got at step 3:
ALTER TABLE attachment RENAME COLUMN user_id TO creator_user_id;
CREATE TABLE "public"."board_membership" (
"id" bigint DEFAULT next_id() NOT NULL,
"board_id" bigint NOT NULL,
"user_id" bigint NOT NULL,
"created_at" timestamp,
"updated_at" timestamp,
CONSTRAINT "board_membership_board_id_user_id_unique" UNIQUE ("board_id", "user_id"),
CONSTRAINT "board_membership_pkey" PRIMARY KEY ("id")
) WITH (oids = false);
CREATE INDEX "board_membership_user_id_index" ON "public"."board_membership" USING btree ("user_id");
ALTER TABLE card ADD COLUMN "creator_user_id" bigint;
UPDATE card SET creator_user_id=410050284119655425;
ALTER TABLE card ALTER COLUMN creator_user_id SET NOT NULL;
ALTER TABLE project_membership RENAME TO project_manager;
DROP INDEX "project_membership_user_id_index";
CREATE INDEX "project_manager_user_id_index" ON "public"."project_manager" USING btree ("user_id");
ALTER TABLE project_manager RENAME CONSTRAINT project_membership_pkey TO project_manager_pkey;
ALTER TABLE project_manager RENAME CONSTRAINT project_membership_project_id_user_id_unique TO project_manager_project_id_user_id_unique;
- Update docker-compose.yml:
planka:
image: meltyshev/planka:1.0.0-beta
- Recreate planka container:
$ docker-compose up -d planka
- Now you should be able to login and display your boards. There could be a ten-seconds waiting the first time you refresh http://localhost:3000.
7b. Step 5 from @Syndamia should also work if you don't want to click through Planka's web UI to add yourself back as board owner but there could be problems.
For instance: after inserting all the rows Planka's web UI would turn black again. Upon inspection I found an orphaned board in the
board table
(that board had no associated cards in thecard
table and its name was identical to another board... maybe it got deleted from the UI, is hidden because it has no child board but it's still present in the database ?) and when I removed the insert statement that referenced that board then Planka's web UI was operating normally again.
Qestion to the pgql guru and @meltyshev. Is it safe to do that:
DROP INDEX "project_membership_user_id_index";
CREATE INDEX "project_manager_user_id_index" ON "public"."project_manager" USING btree ("user_id");
Is there a bash one-liner or something like that for backing up the whole Planka 0.1.6 DB? And maybe an easy restore one-liner? :grinning:
PG is not so easy to backup and restore, I had bad experience regarding it with complex DBs before, so I would like a bullet-proof method instead of a trial&error process with lots of downtime if things go sour with the DB upgrade.
OK, I was also able to upgrade to
planka:1.0.0-beta
fromplanka:0.1.6
but since @TheFrazer went one way (copying tables data) I decided to go another (updating tables).If you know your user id here's the SQL query to run. Then login and reclaim ownership of each board:
ALTER TABLE attachment RENAME COLUMN user_id TO creator_user_id; CREATE TABLE "public"."board_membership" ( "id" bigint DEFAULT next_id() NOT NULL, "board_id" bigint NOT NULL, "user_id" bigint NOT NULL, "created_at" timestamp, "updated_at" timestamp, CONSTRAINT "board_membership_board_id_user_id_unique" UNIQUE ("board_id", "user_id"), CONSTRAINT "board_membership_pkey" PRIMARY KEY ("id") ) WITH (oids = false); CREATE INDEX "board_membership_user_id_index" ON "public"."board_membership" USING btree ("user_id"); ALTER TABLE card ADD COLUMN "creator_user_id" bigint; UPDATE card SET creator_user_id=410050284119655425; ALTER TABLE card ALTER COLUMN creator_user_id SET NOT NULL; ALTER TABLE project_membership RENAME TO project_manager; DROP INDEX "project_membership_user_id_index"; CREATE INDEX "project_manager_user_id_index" ON "public"."project_manager" USING btree ("user_id"); ALTER TABLE project_manager RENAME CONSTRAINT project_membership_pkey TO project_manager_pkey; ALTER TABLE project_manager RENAME CONSTRAINT project_membership_project_id_user_id_unique TO project_manager_project_id_user_id_unique;
Those steps are for when only one user created projects and cards. It's possible to adapt but you most likely may have to manually update ownership of cards, boards and projects. Either through Planka's web UI (easy but can take some time) or through SQL (harder but can be processed in batches).
On a running docker setup:
- Stop and remove the planka container:
$ docker-compose stop planka ; docker-compose rm planka;
- I am using
adminer
http://localhost:3001 out of convenience but you could run an SQL file as an input query to the database server from the postgres container just as easily.Add the following to the
docker-compose.yml
that ships with Planka (user:postgres, password: postgres, server:postgres
) :adminer: image: adminer:4.8.1-standalone ports: - 3001:8080
and run
$ docker-compose up -d adminer
- Get your user id with this query:
SELECT id, username, name, email FROM user_account; -- SELECT id, username, name, email FROM user_account WHERE username=johnchristopher;
- Run this query and modify this line
UPDATE card SET creator_user_id=
with the user id you got at step 3:ALTER TABLE attachment RENAME COLUMN user_id TO creator_user_id; CREATE TABLE "public"."board_membership" ( "id" bigint DEFAULT next_id() NOT NULL, "board_id" bigint NOT NULL, "user_id" bigint NOT NULL, "created_at" timestamp, "updated_at" timestamp, CONSTRAINT "board_membership_board_id_user_id_unique" UNIQUE ("board_id", "user_id"), CONSTRAINT "board_membership_pkey" PRIMARY KEY ("id") ) WITH (oids = false); CREATE INDEX "board_membership_user_id_index" ON "public"."board_membership" USING btree ("user_id"); ALTER TABLE card ADD COLUMN "creator_user_id" bigint; UPDATE card SET creator_user_id=410050284119655425; ALTER TABLE card ALTER COLUMN creator_user_id SET NOT NULL; ALTER TABLE project_membership RENAME TO project_manager; DROP INDEX "project_membership_user_id_index"; CREATE INDEX "project_manager_user_id_index" ON "public"."project_manager" USING btree ("user_id"); ALTER TABLE project_manager RENAME CONSTRAINT project_membership_pkey TO project_manager_pkey; ALTER TABLE project_manager RENAME CONSTRAINT project_membership_project_id_user_id_unique TO project_manager_project_id_user_id_unique;
- Update docker-compose.yml:
planka: image: meltyshev/planka:1.0.0-beta
- Recreate planka container:
$ docker-compose up -d planka
- Now you should be able to login and display your boards. There could be a ten-seconds waiting the first time you refresh http://localhost:3000. 7b. Step 5 from @Syndamia should also work if you don't want to click through Planka's web UI to add yourself back as board owner but there could be problems. For instance: after inserting all the rows Planka's web UI would turn black again. Upon inspection I found an orphaned board in the
board table
(that board had no associated cards in thecard
table and its name was identical to another board... maybe it got deleted from the UI, is hidden because it has no child board but it's still present in the database ?) and when I removed the insert statement that referenced that board then Planka's web UI was operating normally again.Qestion to the pgql guru and @meltyshev. Is it safe to do that:
DROP INDEX "project_membership_user_id_index"; CREATE INDEX "project_manager_user_id_index" ON "public"."project_manager" USING btree ("user_id");
This fixed my issue. Saved me 1000s of hours. THANK YOU.......
ALSO, I had to manually update the migration table to match the new migration table. I created a fresh DB and pointed PLANKA to it, once it got populated, copied the migrations table from the new database to the old database. What I noticed is even though both of the tables have the same number of records they are different to one. another. After updating the migration table to match with the new migration table I pointed the PLANKA back to the old DB. Thats it.
If you find you don't have access to projects or boards, You will have to manually add records to the tables. XXX is your user id.
-- insert into board memebership table
INSERT INTO public.board_membership(
id, board_id, user_id, created_at, updated_at)
select next_id() , b.id ,XXXXX,now(), null
from board b
where b.id not in (
select m.board_id from board_membership m where m.user_id = XXXXX
)
commit;
You might have to do the same for the project membership table.
Also, make sure to run a scheduled backup of the DB. pg_dump -U postgres planka | gzip > planka.gz
Add the following to the cron tab. 24 1 * * * /backup/.postgres-planka-backup -U postgres
After downloading the membership table, and applying migration, knox throws error: Migration "20180721234154_create_project_manager_table.js" not found.
While that file is clearly there:
Is this a bug?
Any ideas why I get this same error now every time the container is recreated? I no longer have to perform migrations of course just wget
the file and planka is happy again. Im running latest
and I see the migration exists in my db:
...
17 | 20180721234154_create_project_manager_table.js | 2 | 2022-05-01 06:59:34.286+00
...
Also tbh I dont really understand why that file is still not in the docker image and this error persists?
After following the instructions in @johnchristopher 's post, I still had to deal with migrations being broken. After I updated my 0.1.6 DB to 1.0.0-beta following these instructions: https://github.com/plankanban/planka/issues/139#issuecomment-903116496
I ran this to update the migration table on 1.0.0-beta. Afterwards I was able to update to 1.1.0, then 1.1.3, 1.2.1, 1.3.1, 1.4.0. I stepped through it to verify the migrations run automatically.
UPDATE migration SET name='20180721234154_create_project_manager_table.js' WHERE name='20180721234154_create_project_membership_table.js';
INSERT INTO migration (name, batch, migration_time) VALUES ('20180722001747_create_board_membership_table.js', 2, CURRENT_TIMESTAMP);
I believe the reason people have to do wget
is because 20180721234154_create_project_membership_table.js
was deleted from the migration folder and replaced with 20180721234154_create_project_manager_table.js
. The migration table in 0.1.6 has a record for a migration with 20180721234154_create_project_membership_table.js
which no longer exists in the newest code base.