Как я могу разрешить DataObjects :: ConnectionError при работе с data_mapper (Ruby 1.8.7)

Когда я запускаю этот код

require 'rubygems'
require 'data_mapper'
require "sqlite3"

DataMapper::setup(:default, "sqlite3://#{Dir.pwd}./prod.db")

class Person
  include DataMapper::Resource
  property :id, Serial

  def initialize(name)
    self[:name] = name
    self.save!
  end

end

DataMapper.finalize.auto_migrate!

Эта ошибка бросается

DataObjects :: ConnectionError: невозможно открыть файл базы данных (код: 14,   sql state:, query:, uri:).

Кажется, он жалуется на строку DataMapper.finalize.auto_migrate! .

Если я комментирую класс человека, код работает нормально, хотя и несколько бесполезно.

OS, в которую я получаю ошибку, - это Linux Mageia 2. Я отлично справился с WindowsXP и Windows7 с обоими ruby 1.9.3, хотя я подозреваю, что проблема в старой версии ruby ​​- проблема не в ОС.

Кроме того, для меня, вероятно, важно сказать вам, что разрешения на папку с файлом очень открыты (-rwxrwxrwx) (Вероятно, это не так просто для этого, чтобы это было открыто для повседневного использования, но я отчаянно нуждаюсь в том, чтобы работать с data_mapper) ,

Вот и другие характеристики, которые могут быть интересны Мои местные драгоценные камни sqlite3 (1.3.7, 1.3.3) sqlite3-ruby (1.3.3) data_mapper (1.2.0)

Я понимаю, что здесь есть много переменных, которые можно было бы изменить. Я думал, что сначала поставлю это там и посмотрю, было ли это простое исправление, которое я пропустил без вести :)

0
nl ja de
Просто запустил его на моем ruby 1.8.7. Прекрасно работает без волшебной точки.
добавлено автор Casper, источник
Можете ли вы попробовать изменить DataMapper :: setup (: default, "sqlite3://# {Dir.pwd} ./prod.db") в DataMapper :: setup (: default, " sqlite3://# {} Dir.pwd /prod.db ") ?
добавлено автор morbusg, источник

1 ответы

В вашем коде у вас есть инструкция по настройке DataMapper

DataMapper::setup(:default, "sqlite3://#{Dir.pwd}./prod.db")

в котором говорится, что местоположение базы данных sqlite находится в каталоге с именем: текущий рабочий каталог + . , который не может быть найден и, следовательно, ошибка. Поэтому удаление точки из URI должно решить вашу проблему для этой части.

Обратите внимание, что # {Dir.pwd} указывает на текущий рабочий каталог; возможно, было бы безопаснее указывать на абсолютный путь по отношению к текущему файлу, вместо этого говоря: например, File.dirname (File.expand_path (__ FILE __)) . Причина в том, что если файл используется вне каталога, в котором он существует, он может быть найден.

Теперь для определения класса. В вашей инициализации вы ссылаетесь на несуществующий метод/свойство, называемый name . Я думаю, что вы ищете только объявление свойств, например

property :name, String

You don’t need an initializer for that, you can just use, for example, Person.create(:name => 'Foo') which persists the object into the database.

Говоря о том, что, возвращаясь к соединению с базой данных по умолчанию, вам может быть интересно использовать sqlite в памяти для тестирования. Вы можете это сделать

DataMapper.setup(:default, "sqlite::memory:')

Это запустит db с чистого листа каждый раз, когда вы используете файл.

1
добавлено
Спасибо за полный ответ! Код удалился без ошибок после удаления точки, так что спасибо. Другие рекомендации полезны. Я попробую их. Хороший ответ, для не очень хорошего вопроса :)
добавлено автор JoeyC, источник
Linux Help
Linux Help
2 686 участник(ов)

Правила: https://telegra.ph/Pravila-Linux-Help-10-15

pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

Linux Security
Linux Security
652 участник(ов)

Данная группа принципиально про безопасность и в частности про безопасность Linux. Прочие темы просим обсуждать в профильных чатах.

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков

Linux Gaming RUS
Linux Gaming RUS
28 участник(ов)

Русскоязычный чатик, посвящённый играм на различных дистрибутивах Linux, а также wine, proton Arch Linux RU @ArchLinuxChatRU Gnome RU @gnome_ru