1

ansible を介して sinatra プロジェクトをデプロイしていますが、タスクの 1 つはアセットをプリコンパイルすることです。

最初は、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-8commandモジュール、モジュールなどの膨大な数のコマンドを試しましshellたが、何も役に立たず、すべての試みが惨めに失敗しました。

この問題を回避する方法がよくわかりません。

助けが必要!

4

2 に答える 2

0

commandmodule は、複数のシェル コマンドで使用するためのものではありません。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

于 2015-09-20T07:26:41.067 に答える
0

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"

それは私のために働いた!

于 2015-09-23T11:44:09.270 に答える