SQLite3 и Unicorn — как настроить базу данных для записи?

У меня развернут веб-сайт, на котором я хочу разрешить пользователям заполнять формы. Однако формы не могут быть записаны, потому что база данных в настоящее время доступна только для чтения! Как я могу изменить SQLite3, чтобы любой пользователь мог писать в базу данных?

Вот мой Unicorn.log:

root@The-Origin-of-Foods:/home/unicorn# tail -20 log
tail: error reading ‘log’: Is a directory
root@The-Origin-of-Foods:/home/unicorn# cd log
root@The-Origin-of-Foods:/home/unicorn/log# ls
unicorn.log
root@The-Origin-of-Foods:/home/unicorn/log# tail -20 unicorn.log
  Parameters: {"id"=>"3"}
  Food Load (1.9ms)  SELECT  "foods".* FROM "foods" WHERE "foods"."id" = ? LIMIT 1  [["id", 3]]
  Food Load (3.8ms)  SELECT "foods".* FROM "foods"
  Rendered foods/_form.html.erb (10.2ms)
  Rendered foods/edit.html.erb within layouts/application (15.5ms)
Completed 200 OK in 44ms (Views: 20.7ms | ActiveRecord: 5.6ms)
Started PATCH "/foods/3" for 135.23.129.198 at 2015-03-25 22:35:07 +0000
Processing by FoodsController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"hmexKPwxoAvbU9mhgOr7DJnI7PAx92KgTT1ZhHqOnJiiwx2lj4Roi/eoOR1U7EajIxgyyww4rHZaoAG7E+IT6A==", "food"=>{"name"=>"sfasdf", "sciname"=>"asdfj", "origin"=>"asdf", "description"=>"sadf", "years"=>"sdf", "source"=>"hfvjkhj"}, "commit"=>"Update", "id"=>"3"}
  Food Load (1.7ms)  SELECT  "foods".* FROM "foods" WHERE "foods"."id" = ? LIMIT 1  [["id", 3]]
   (0.6ms)  begin transaction
  SQL (1.9ms)  UPDATE "foods" SET "sciname" = ?, "updated_at" = ? WHERE "foods"."id" = ?  [["sciname", "asdfj"], ["updated_at", "2015-03-25 22:35:07.663449"], ["id", 3]]
SQLite3::ReadOnlyException: attempt to write a readonly database: UPDATE "foods" SET "sciname" = ?, "updated_at" = ? WHERE "foods"."id" = ?
   (0.3ms)  rollback transaction
Completed 500 Internal Server Error in 45ms

ActiveRecord::StatementInvalid (SQLite3::ReadOnlyException: attempt to write a readonly database: UPDATE "foods" SET "sciname" = ?, "updated_at" = ? WHERE "foods"."id" = ?):
  app/controllers/foods_controller.rb:36:in `update'

Я использую Nginx с Unicorn на VPS DigitalOcean. Рельсы 4.2 и Руби 2.1.3


person nvrpicurnose    schedule 25.03.2015    source источник
comment
пользователь, запускающий это приложение Rails, должен иметь право на запись в этот файл. Это проблема разрешения. У вас есть решение здесь: stackoverflow.com/questions/8900565 /rails-3-1-sqlite-исключение   -  person cristian    schedule 26.03.2015
comment
вау, это сработало, спасибо!   -  person nvrpicurnose    schedule 26.03.2015


Ответы (1)


Итак, решение состояло в том, чтобы использовать chmod для изменения прав доступа к файлу. Я нашел свою базу данных внутри db/production.sqlite3. затем я использовал командную строку и набрал:

chmod 777 production.sqlite3

chmod позволяет мне изменять разрешения и классы, у каждого из которых есть 3 типа: чтение, запись, выполнение и владелец, группа, другие. 777 — это числовой код, который устанавливает значения этих разрешений и классов. Подробнее об этом можно прочитать здесь http://www.maketecheasier.com/file-permissions-what-does-chmod-777-means/

person nvrpicurnose    schedule 25.03.2015
comment
Это не очень хорошо с точки зрения безопасности (т.е. 777 дает всем полный доступ к файлу) - person thestacker; 06.01.2020