Bundler это не "связка" sqlite3 - PullRequest
1 голос
/ 20 марта 2012

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

Вот как это происходит:

На моем компьютере для разработки в моем файле gem есть строка, подобная этой:

gem "sqlite3-ruby", :require => "sqlite3"

что происходит, когда я устанавливаю пакет --no-deploy, все идет хорошо:

Using sqlite3 (1.3.5)
Using sqlite3-ruby (1.3.3)
Updating .gem files in vendor/cache
Your bundle is complete! It was installed into ./vendor/bundle

Но затем, при развертывании, запустив пакетную установку --deployment, я получаю:

Using sqlite3-ruby (1.3.3)
Updating .gem files in vendor/cache
Your bundle is complete! It was installed into ./vendor/bundle

... что приводит к возникновению ошибок, приводящих к сбою приложения. Затем я делаю пакетную установку --no-deploy на компьютере для развертывания. Затем я снова запускаю bundle install --deployment, а затем волшебным образом:

Using sqlite3 (1.3.5)
Using sqlite3-ruby (1.3.3)
Updating .gem files in vendor/cache

И тогда приложение работает нормально.

Итак, что мне больше всего нужно, так это то, что упаковщик распознает зависимость sqlite3 от гема sqlite3

1 Ответ

1 голос
/ 20 марта 2012

Но затем, при разработке, запустив пакетную установку --deployment, я получаю:

Хорошо, это первая подозрительная вещь.Зачем вам запускать --deployment в разработке?

Как правило, вы не хотите этого делать.Если вы все время переключаетесь между «--deployment» и «--no-deploy» на одной машине, легко запутаться, да.

Запуск "bundle install --deployment" сохранит что-то в файле .bundle/config в вашем проекте, что скажет bundler "отныне устанавливайте только эти драгоценные камни".«--no-deploy» удаляет это снова, если вы допустили ошибку или вам нужно взломать.Но в целом вам не нужно и не нужно постоянно переключаться назад и вперед.Запустите --deployment на своей машине производства / развертывания, не запускайте ее на своей машине разработки.Вам никогда не нужно запускать --no-deployment, если вы не допустили ошибку и не имели в виду --deployment

На этом этапе я бы rm -rf .bundle (все в порядке, он просто удалит всеупаковщик вещей «помнит» о том, что вы хотите сделать, например --deployment), и начинайте заново с bundle install.

Если есть какая-то причина, по которой это не работает, тогда это вопрос.

Из строки Updating .gem files in vendor/cache я подозреваю, что в какой-то момент вы также запустили bundle package, что является еще одной вещью, которая "запомнилась" в вещи .bundle/config, и, вероятно, также странным образом взаимодействует с вашими другими командамии делать то, что вы не ожидаете.Удаление вашего .bundle/config также избавит вас от этой запомненной настройки.(вам также может понадобиться удалить содержимое каталога ./vendor/cache)

Просто запустите bundle install, если у вас нет причин, по которым вы понимаете необходимость package, и не понимаете, что он делает.Или это вас запутает.

...