alainmeier / cryptonote

:lock: A simple open source web application that lets users encrypt and share messages that can only be read once.
https://cryptonote.me
MIT License
179 stars 34 forks source link

SQLite database migration fails #25

Open lucianonooijen opened 5 years ago

lucianonooijen commented 5 years ago

Using the Dockerfile below, the SQLite migration seems to fail:

FROM ruby:2.5.3

ENV RAILS_ENV production

RUN apt-get install git

RUN curl -sL https://deb.nodesource.com/setup_10.x | bash -
RUN apt-get install -y nodejs

WORKDIR /app

RUN git clone https://github.com/alainmeier/cryptonote.git .
RUN cp config/database.yml.sample config/database.yml
RUN echo "gem 'sqlite3', '~> 1.3.6'" >> Gemfile
RUN ./bin/bundle install
RUN ./bin/rake assets:precompile
RUN ./bin/rake db:setup
RUN ./bin/rake db:migrate

CMD ./bin/rails server

It gives the following error:

Step 12/14 : RUN ./bin/rake db:setup
 ---> Running in 406c851864e1
rake aborted!
ActiveRecord::StatementInvalid: SQLite3::SQLException: near "(": syntax error: CREATE TABLE "messages" ("id" uuid DEFAULT uuid_generate_v4() NOT NULL PRIMARY KEY, "content" text, "location" varchar, "password" varchar, "latitude" float, "longitude" float, "created_at" datetime, "updated_at" datetime, "encryption_key" varchar, "salt" varchar, "deleted" boolean DEFAULT 'f')
/usr/local/bundle/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:91:in `initialize'
/usr/local/bundle/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:91:in `new'
/usr/local/bundle/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:91:in `prepare'
/usr/local/bundle/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:137:in `execute'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/sqlite3_adapter.rb:232:in `block in execute'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract_adapter.rb:590:in `block in log'
/usr/local/bundle/gems/activesupport-5.0.7.2/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract_adapter.rb:583:in `log'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/sqlite3_adapter.rb:232:in `execute'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract/schema_statements.rb:278:in `create_table'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/migration.rb:846:in `block in method_missing'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/migration.rb:815:in `block in say_with_time'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/migration.rb:815:in `say_with_time'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/migration.rb:835:in `method_missing'
/app/db/schema.rb:19:in `block in <top (required)>'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/schema.rb:48:in `instance_eval'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/schema.rb:48:in `define'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/schema.rb:44:in `define'
/app/db/schema.rb:13:in `<top (required)>'
/usr/local/bundle/gems/activesupport-5.0.7.2/lib/active_support/dependencies.rb:287:in `load'
/usr/local/bundle/gems/activesupport-5.0.7.2/lib/active_support/dependencies.rb:287:in `block in load'
/usr/local/bundle/gems/activesupport-5.0.7.2/lib/active_support/dependencies.rb:259:in `load_dependency'
/usr/local/bundle/gems/activesupport-5.0.7.2/lib/active_support/dependencies.rb:287:in `load'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/tasks/database_tasks.rb:226:in `load_schema'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/tasks/database_tasks.rb:255:in `block in load_schema_current'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/tasks/database_tasks.rb:295:in `block in each_current_configuration'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/tasks/database_tasks.rb:292:in `each'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/tasks/database_tasks.rb:292:in `each_current_configuration'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/tasks/database_tasks.rb:254:in `load_schema_current'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/railties/databases.rake:248:in `block (3 levels) in <top (required)>'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/railties/databases.rake:252:in `block (3 levels) in <top (required)>'
SQLite3::SQLException: near "(": syntax error
/usr/local/bundle/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:91:in `initialize'
/usr/local/bundle/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:91:in `new'
/usr/local/bundle/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:91:in `prepare'
/usr/local/bundle/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:137:in `execute'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/sqlite3_adapter.rb:232:in `block in execute'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract_adapter.rb:590:in `block in log'
/usr/local/bundle/gems/activesupport-5.0.7.2/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract_adapter.rb:583:in `log'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/sqlite3_adapter.rb:232:in `execute'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract/schema_statements.rb:278:in `create_table'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/migration.rb:846:in `block in method_missing'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/migration.rb:815:in `block in say_with_time'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/migration.rb:815:in `say_with_time'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/migration.rb:835:in `method_missing'
/app/db/schema.rb:19:in `block in <top (required)>'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/schema.rb:48:in `instance_eval'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/schema.rb:48:in `define'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/schema.rb:44:in `define'
/app/db/schema.rb:13:in `<top (required)>'
/usr/local/bundle/gems/activesupport-5.0.7.2/lib/active_support/dependencies.rb:287:in `load'
/usr/local/bundle/gems/activesupport-5.0.7.2/lib/active_support/dependencies.rb:287:in `block in load'
/usr/local/bundle/gems/activesupport-5.0.7.2/lib/active_support/dependencies.rb:259:in `load_dependency'
/usr/local/bundle/gems/activesupport-5.0.7.2/lib/active_support/dependencies.rb:287:in `load'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/tasks/database_tasks.rb:226:in `load_schema'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/tasks/database_tasks.rb:255:in `block in load_schema_current'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/tasks/database_tasks.rb:295:in `block in each_current_configuration'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/tasks/database_tasks.rb:292:in `each'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/tasks/database_tasks.rb:292:in `each_current_configuration'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/tasks/database_tasks.rb:254:in `load_schema_current'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/railties/databases.rake:248:in `block (3 levels) in <top (required)>'
/usr/local/bundle/gems/activerecord-5.0.7.2/lib/active_record/railties/databases.rake:252:in `block (3 levels) in <top (required)>'
Tasks: TOP => db:schema:load
(See full trace by running task with --trace)
Created database 'db/production.sqlite3'
-- enable_extension("plpgsql")
   -> 0.0002s
-- enable_extension("uuid-ossp")
   -> 0.0000s
-- create_table("messages", {:id=>:uuid, :default=>#<Proc:0x00005622e65b0d38@/app/db/schema.rb:19 (lambda)>, :force=>:cascade})
The command '/bin/sh -c ./bin/rake db:setup' returned a non-zero code: 1
hyphus commented 4 years ago

@lucianonooijen did you ever find a solution to this?

lucianonooijen commented 4 years ago

Unfortunately, no

hyphus commented 4 years ago

I'm a ruby noob but using your Dockerfile above as a base I think I got it working. The site loads, and seems to function fine, but I haven't done exhaustive testing.

I changed your sqlite version to be 1.4.2 although I'm not sure that matters.

In schema.rb I changed line 19 from this: create_table "messages", id: :uuid, default: -> { "uuid_generate_v4()" }, force: :cascade do |t|

to this: create_table "messages", id: :uuid, default: -> { "uuid_generate_v4" }, force: :cascade do |t|

hyphus commented 4 years ago

I spoke too soon. It works for the first request but fails on subsequent requests with a unique constraint error which makes sense now that I think about it.