Подтвердить что ты не робот

Не удалось запустить миграцию после обновления spring в Rails

Я сталкиваюсь с ошибкой при выполнении любой миграции как:

[email protected]:~/Desktop/Projects/invoicemanagement$ rails g migration RemoveDescriptionOfGoodsFromInvoiceDetails description_of_goods:string
Warning: You're using Rubygems 1.8.23 with Spring. Upgrade to at least Rubygems 2.1.0 and run `gem pristine --all` for better startup performance.
/var/lib/gems/1.9.1/gems/bundler-1.9.0/lib/bundler/runtime.rb:34:in `block in setup': You have already activated spring 1.3.3, but your Gemfile requires spring 1.3.2. Prepending `bundle exec` to your command may solve this. (Gem::LoadError)
    from /var/lib/gems/1.9.1/gems/bundler-1.9.0/lib/bundler/runtime.rb:19:in `setup'

    ** 11 stack trace lines skipped **

    from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:35:in `require'

Итак, с некоторыми поисковыми системами я запускаю обновление пакета spring, которое разрешило указанную выше ошибку, и я могу удалить/добавить миграции. Опять же, если я запустил rake db: migrate, я получаю ошибку как:

rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

undefined method `to_sym' for nil:NilClass/var/lib/gems/1.9.1/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract/schema_definitions.rb:216:in `column'

    ** 33 stack trace lines skipped **

/var/lib/gems/1.9.1/gems/activerecord-4.1.4/lib/active_record/railties/databases.rake:34:in `block (2 levels) in <top (required)>'
Tasks: TOP => db:migrate

Пожалуйста, помогите мне.

4b9b3361

Ответ 1

После запуска bundle update и обновления Spring, я получал следующую ошибку при запуске консоли:

There is a version mismatch between the spring client and the server.
You should restart the server and make sure to use the same version.

CLIENT: 1.3.4, SERVER: 1.3.3

Я выполнил рекомендации в этой проблеме Github и запустил:

spring stop

Это исправило проблему для меня.

Ответ 2

попробуйте запустить "пакетное обновление" в вашем терминале, а затем попробуйте "rails console" снова, как обычно, - у меня была эта же проблема, запуск обновления пакета сначала исправил его для меня!

Ответ 3

Выполнить: ps aux | grep spring, затем запустите процесс spring.

Это сработало для меня.

Ответ 4

У меня была аналогичная проблема с попыткой запуска команд rails за пределами моего контейнера докеров.

В моем случае, мой файл Gemfile.lock сказал, что он использует Spring (1.3.4), но сообщение об ошибке говорит, что на моем сервере была запущена версия 1.3.5. Превращение моей команды с помощью bundle exec тоже не имело никакого значения. Запустив

gem list | grep spring

Я заметил, что у меня установлено несколько версий. После того, как я запустил

gem uninstall spring -v '1.3.5'

и bundle, он отлично работал.

Кто знает, возможно, мне понадобилась более новая версия для какого-то другого проекта.

Ответ 5

Это происходит потому, что одна из зависимостей вашего проекта - более старая версия Spring, чем установлена ​​в вашей системе:

You have already activated spring 1.3.3, but your Gemfile requires spring 1.3.2. Prepending `bundle exec` to your command may solve this. (Gem::LoadError)

Правильный способ справиться с этим - добавить команду bundle exec к вашей команде, как указывает сообщение об ошибке. См. Ниже:

При запуске исполняемого файла ALWAYS используют команду exec [command]. Цитата из документации поставщика: В некоторых случаях выполнение исполняемых файлов без пакета exec может работать, если исполняемый файл, возможно, установлен в вашей системе и не втягивает никаких драгоценных камней, которые конфликтуют с вашим пакетом. Однако это ненадежно и является источником значительной боли.

http://yehudakatz.com/2011/05/30/gem-versioning-and-bundler-doing-it-right/

Запуск bundle update может вызвать некоторые другие проблемы. Если ваша вторая ошибка сохраняется, вы можете вернуться к своему старому Gemfile из управления версиями.

Ответ 6

Остановить сервер spring

spring stop