Не удается предварительно скомпилировать активы Sinatra через ansible

Я развертываю свой проект 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 модуль, но ничего не помогает, все мои попытки с треском провалились.

Я действительно не знаю, как обойти эту проблему.

Нужна помощь!


person Nick Roz    schedule 18.09.2015    source источник


Ответы (2)


Модуль command не предназначен для использования с несколькими командами оболочки. Вместо этого следует использовать модуль shell:

- name: Precompiling assets
  shell: bundle exec rake assetpack:build chdir={{ build_path }}

Любую переменную среды, которая требуется перед запуском bundle, можно настроить, как в следующем примере:

- name: Precompiling assets
  shell: RAILS_ENV=development bundle exec rake assetpack:build chdir={{ build_path }}

http://docs.ansible.com/ansible/shell_module.html

person Gregory Shulov    schedule 20.09.2015
comment
Сам вопрос не о разнице между командными модулями и модулями оболочки, а о проблемах кодирования, с которыми я столкнулся при компиляции ресурсов. - person Nick Roz; 21.09.2015
comment
модуль оболочки не знает о rake или bundle - person Nick Roz; 23.09.2015

Я должен был изменить не только переменную LANG, но и LANG, и LC_ALL:

- name: Precompiling assets
  environment:
    LANG: "ru_RU.UTF-8"
    LC_ALL: "ru_RU.UTF-8"
  command: bash -lc "cd {{ build_path }} && bundle exec rake assetpack:build"

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

person Nick Roz    schedule 23.09.2015