Я развертываю свой проект sinatra через ansible, и одной из задач является предварительная компиляция ресурсов.
Сначала я задался вопросом как правильно инициализировать rbenv.
Затем я сделал следующее:
- name: Precompiling assets
command: bash -lc "cd {{ build_path }} && bundle exec rake assetpack:build"
Но потом я получил ошибку Encoding::UndefinedConversionError at assets/application.js
Когда я подключился по ssh к серверу и запустил bundle exec rake assetpack:build
- все заработало отлично. Итак, я предположил, что это связано с настройка переменных среды
lookup('env', 'LANG')
говорит, что это "msg": "ru_RU.UTF-8"
, но echo $LANG говорит, что это "C" (посмотреть там).
Обратитесь к этой проблеме. В нем говорится:
Ansible устанавливает LANG в C для модулей, которым он не нужен
Модули Ansible автоматически устанавливают «$LANG=C».
Добавление переменной среды не дало желаемого результата:
environment:
LANG: ru_RU.UTF-8
command: bash -lc "cd {{ build_path }} && bundle exec rake assetpack:build"
В то же время модуль оболочки, похоже, ничего не знает о bundle
, поэтому это тоже не сработало:
- name: Precompiling assets
command: bash -lc "cd {{ build_path }} && bundle exec rake assetpack:build"
Я перепробовал огромное количество команд, таких как export LANG=ru_RU.UTF-8
, command
модуль, shell
модуль, но ничего не помогает, все мои попытки с треском провалились.
Я действительно не знаю, как обойти эту проблему.
Нужна помощь!