🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

3回答

1936閲覧

AnsibleでRails環境を構築したい

pay_561

総合スコア26

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/03/30 05:06

編集2021/03/31 09:05

##困っていること・前提
EC2上にansibleを使用しRailsの環境を構築したいのですがエラーが発生しまた。

[WARNING]: Consider using 'become', 'become_method', and 'become_user' rather than running sudo

上記のように現在sudoコマンドを直接利用するのは、現在非推奨になっているようです。
ですがsudoモジュールを使用している箇所がなく唯一使用しているのがCheck if version is installed rubyのshellモジュールです。
shellモジュール内でsudoを書かない記述方法がありますでしょうか

shell: "sudo -iu {{ rbenv_user }} rbenv versions | grep {{ rbenv_ruby_version }}"

##エラー

TASK [Check if version is installed ruby] ************************************************************************************* [WARNING]: Consider using 'become', 'become_method', and 'become_user' rather than running sudo fatal: [☓☓.☓☓.☓☓.☓☓]: FAILED! => {"changed": false, "cmd": "sudo -iu ec2-user rbenv versions | grep 2.7.2", "delta": "0:00:00.145138", "end": "2021-03-31 08:50:00.875045", "msg": "non-zero return code", "rc": 1, "start": "2021-03-31 08:50:00.729907", "stderr": "Warning: no Ruby detected on the system", "stderr_lines": ["Warning: no Ruby detected on the system"], "stdout": "", "stdout_lines": []} ...ignoring

##コード

- name: 'Install packages' yum: name: "{{ item }}" with_items: - gcc - openssl-devel - libyaml-devel - readline-devel - zlib-devel - libffi-devel - gdbm-devel - ncurses-devel - name: Install rbenv become: yes become_user: "{{ rbenv_user }}" git: repo=https://github.com/sstephenson/rbenv.git dest=~/.rbenv - name: Add ~.rbenv/bin to PATH become: yes become_user: "{{ rbenv_user }}" lineinfile: > dest="~/.bash_profile" line="export PATH=$HOME/.rbenv/bin:$PATH" - name: Eval rbenv init in ~/.bash_profile become: yes become_user: "{{ rbenv_user }}" lineinfile: > dest="~/.bash_profile" line='eval "$(rbenv init -)"' - name: Install ruby-build as rbenv plugin become: yes become_user: "{{ rbenv_user }}" git: repo=https://github.com/sstephenson/ruby-build.git dest=~/.rbenv/plugins/ruby-build -----------ここまでインストールされていることを確認----------------------- - name: Check if version is installed ruby shell: "sudo -iu {{ rbenv_user }} rbenv versions | grep {{ rbenv_ruby_version }}" register: rbenv_check_install changed_when: False ignore_errors: yes

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

記載して頂いた他のタスクでも使用されている

become: yes become_user: "{{ rbenv_user }}"

をご利用ください。

投稿2021/03/30 05:19

comefigo

総合スコア1051

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pay_561

2021/03/30 05:32

ご回答ありがとうございます。 become: yes become_user: "{{ rbenv_user }}" をどのあたりに記載すればいいのでしょうか
comefigo

2021/03/30 06:06 編集

こんな感じですね。 - name: xxx  shell: "xxx"  become: yes  become_user: "{{ rbenv_user }}"
pay_561

2021/03/31 09:07

ご回答ありがとうございます。 shell内でのsudoも使用できないのでしょうか? レポートを修正しましたのでご確認いただけると幸いです。
comefigo

2021/03/31 09:12

shell内でsudoは使用できますよ。 becomeと併用するという意味でしょうか? レポートとはなんでしょうか?
guest

0

ベストアンサー

別回答にて指摘あるように、sudoのところはあくまでWARNINGなのでそこが原因でエラーになっているわけではないです。

そこでエラーが出ているのは、そこまでの過程でまだrbenvを使ってRubyをインストールしていないので、対象のバージョンがまだないからではないでしょうか?
そこがエラーになるかどうかによってその後インストールの処理を実行するかどうかを振り分けるため

yaml

1 register: rbenv_check_install 2 changed_when: False 3 ignore_errors: yes

あたりを設定していると思うので、そこがエラーになること自体は問題ではないと思います。
もしすでにrbenvによるインストールが済んでいるにも関わらずそこがエラーになるなら何か別の問題があるものと思われますけれど。

また、価値観の問題かもしれませんが、他のところではbecome_userで{{ rbenv_user }}での実行をしているのに、該当の処理だけわざわざsudoで{{ rbenv_user }}での実行をさせるのはちょっと気持ちが悪いですね…。
おそらくシェルを読み込むためにそうしてるんだと思いますが、自分はそうではなくて下記のようにbash -lcでログインシェルを呼び出した上でコマンド実行する方をおすすめします。。

yaml

1 become: yes 2 become_user: "{{ rbenv_user }}" 3 shell: bash -lc "rbenv versions | grep {{ ruby_version }}"

なお、同じ問題に対する対処の仕方はこちらに色々出てます。
Install Bundler gem using Ansible

投稿2021/04/01 09:21

yu_1985

総合スコア7588

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

sudoの件はあくまでWARNINGなので、実際のエラーは別にあると思います。

以下のコマンドを手動実行したとしてもリターンコード0以外が帰ってきているのではないでしょうか?

sudo -iu ec2-user rbenv versions | grep 2.7.2

shellモジュールはリターン0以外だと失敗扱いになるので、
必要に応じてignore_errorsやfailed_whenをつけるようにしましょう。

また、エラーに記載のある出力結果とソースコードに差異があるのが気になります。

例えば、エラーの記載にある出力結果だとignore_errorsが付与されている且つ後続のタスクが実施されていて、後続のタスクの条件で失敗しているように見えます。

後続のタスクのソースがないので憶測になりますが、
以下の様な書き方はサポートされなくなった(多分)ので修正してみてはどうでしょうか?
rbenv_check_install|failed
→ rbenv_check_install is failed

投稿2021/03/30 05:55

jir01030

総合スコア129

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問