2015-09-04 5 views
3

Я пытался установить Addict, поэтому я добавил mix.ex последнюю версию (как в Hex):Ошибка при установке Addict - конфликтующие требования к Ecto

{:addict, ">= 0.1.0"} 

Затем я запустить reps.get микс и получил ошибку:

Глядя вверх альтернатив для противоречивых требований на экто

From mix.lock: 1.0.0 
    From addict v0.1.0: ~> 0.9 
** (Mix) Hex dependency resolution failed, relax the version requirements or unlock dependencies 

Я попытался сделать это в mix.lock, но не смог преодолеть это потому, что появилась эта ошибка:

(Mix) Unknown package version ecto v0.0.9 in lockfile 

Каков наилучший способ преодолеть это?

ответ

4

Вы можете установить зависимость для переопределения с override флагом:

defp deps do 
    ... 
    {:ecto, "~> 1.0.0", override: true}, 
    {:addict, "~> 0.1.0"}, 
    ... 
end 

От docs:

:override - if set to true the dependency will override any other definitions of itself by other dependencies

Это означает, что даже если addict устанавливает версию 0.9.0 - версия 1.0.0 воли использоваться. Это может вызвать проблемы, если наркоман использует функцию в Ecto, которая теперь устарела.

+0

Еще раз спасибо. Я добавил {: ecto, "> = 1.0.0", переопределить: true} в mix.exs, и хотя ошибка была с mix.lock, она решила его. Какова роль mix.lock? Кроме того, можете ли вы быть достаточно любезными, чтобы объяснить, в чем разница между оператором ~> и> =? –

+1

Файл 'mix.lock' предназначен для блокировки зависимостей. Это означает, что если вы создаете проект, и я его клонирую, полученные мной зависимости будут теми же, что у вас есть. Он будет хранить точные номера версий вместо «ограничений версии», которые вы укажете в 'mix.exs' - вы не должны изменять' mix.lock' вручную. Вероятно, вы должны использовать '~>' вместо '> =' Различия объясняются в http://stackoverflow.com/questions/4292905/what-is-the-difference-between-and-when-specifying-rubygem-in -gemfile – Gazler

+0

Спасибо, Газлер. Кристально чистый. –

Смежные вопросы