грабли db:create - проблемы сопоставления

После чтения и испытания много реализаций, я заметил, что очень немного людей пытаются проверить на значения как JSON, Math, document или объекты с опытными цепочками дольше, чем 1 шаг.

Вместо того, чтобы проверить typeof из нашей переменной и затем взломать далеко пограничные случаи, я думал, что будет лучше, если проверка будет сохранена максимально простой избежать необходимости осуществлять рефакторинг, когда существуют новые примитивы, или собственные объекты добавили что регистр как typeof из 'объекта'.

, В конце концов, typeof оператор скажет Вам, если что-то будет объектом к JavaScript, но определение JavaScript объекта слишком широко для большинства реальных сценариев (например, typeof null === 'object'). Ниже функция, которая определяет, является ли переменная v объектом путем важного повторения двух проверок:

  1. цикл А запускается, который продолжается, пока stringified версия v '[object Object]'.
    я хотел, чтобы результат функции точно был похож на журналы ниже, таким образом, это - единственная "объектность" - критерии, я закончил с. Если это перестало работать, функция возвращает false сразу же.
  2. v заменен следующим прототипом в цепочке с [1 112], но также и непосредственно оценен после. Когда новое значение [1 113] null, это означает, что каждый прототип включая корневой прототип (который, возможно, очень хорошо был только [1 127] прототип в цепочке) передали регистрацию цикла с условием продолжения, и мы можем возвратить true. Иначе новое повторение запускается.

function isObj (v) {
  while (     Object.prototype.toString.call(v) === '[object Object]')
  if    ((v = Object.getPrototypeOf(v))         === null)
  return true
  return false
}

console.log('FALSE:')
console.log('[]                   -> ', isObj([]))
console.log('null                 -> ', isObj(null))
console.log('document             -> ', isObj(document))
console.log('JSON                 -> ', isObj(JSON))
console.log('function             -> ', isObj(function () {}))
console.log('new Date()           -> ', isObj(new Date()))
console.log('RegExp               -> ', isObj(/./))

console.log('TRUE:')
console.log('{}                   -> ', isObj({}))
console.log('new Object()         -> ', isObj(new Object()))
console.log('new Object(null)     -> ', isObj(new Object(null)))
console.log('new Object({})       -> ', isObj(new Object({foo: 'bar'})))
console.log('Object.prototype     -> ', isObj(Object.prototype))
console.log('Object.create(null)  -> ', isObj(Object.create(null)))
console.log('Object.create({})    -> ', isObj(Object.create({foo: 'bar'})))
console.log('deep inheritance     -> ', isObj(Object.create(Object.create({foo: 'bar'}))))
5
задан Zach Inglis 2 September 2009 в 11:46
поделиться

5 ответов

У меня была та же проблема, что и у вас, я и мои друзья все сходили с ума из-за этого, пока мы не нашли эту ссылку http://weblog.rubyonrails.org/2009/8/30/ upgrade-to-snow-leopard

Я только что выполнил шаги установки mysql, и здесь он отлично сработал:]

6
ответ дан 18 December 2019 в 14:48
поделиться

База данных уже существует? MySQL установлен и запущен? Что изменилось? (Возможно, обновление ОС)? Работает ли свежее приложение rails? А как насчет других ваших сред (тестовая, производственная)?

Есть ли обратная трассировка? вы можете публиковать (используйте rake --trace db: create). Обычно MySQL возвращает очень явное сообщение об ошибке, rake просто съедает его.

-1
ответ дан 18 December 2019 в 14:48
поделиться

Я только что столкнулся с этим при новой установке Snow Leopard.

У меня был другой проект, в котором базы данных создавались без проблем, но мой основной проект выдавал описанные вами ошибки. После осмотра, единственная разница заключалась в том, что в первом был указан сокет, а в неудачном проекте (и в вашем тоже) используется хост.

То есть, этот файл database.yml вызывает проблему:

development:
  adapter: mysql
  database: fanvsfan_development
  username: root
  password:
  host: localhost

Но это работает:

development:
  adapter: mysql
  database: fanvsfan_development
  username: root
  password:
  socket: /tmp/mysql.sock

Я не знаю, в чем разница, но это похоже на временное решение.

1
ответ дан 18 December 2019 в 14:48
поделиться

Это хорошая ссылка. И я получил, если это исправлено http://www.ultrasaurus.com/sarahblog/2008/12/getting-started-with-rails-2-day-1/

0
ответ дан 18 December 2019 в 14:48
поделиться

У меня возникла такая же проблема после установки нового сервера базы данных MySQL5.0–5.1. Если вы установили новый db-server, ваша библиотека mysql gem не подходит для вашего сервера базы данных. Вы можете решить эту проблему, переустановив mysql gem lib.

 sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-config=/your/mysql_config
3
ответ дан 18 December 2019 в 14:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: