1

我正在通过 ansible 部署我的 sinatra 项目,其中一项任务是预编译资产。

起初我对如何正确初始化 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"

同时,shell 模块似乎一无所知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

我不仅应该改变LANG变量,还应该改变LANGand 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 回答
0

commandmodule 不打算与多个 shell 命令一起使用。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 回答