72397


[foreman](https://github.com/ddollar/foreman) を使って、2 つの異なるバージョンの ruby で動いている
rails アプリケーションを起動しようとしています。

素直に、

[code]

    app1: cd app1 && bin/rails s
    app2: cd app2 && bin/rails s
    
[/code]

を `Procfile` に記述して、 `foreman start` したのですが、 foreman を実行している ruby
のバージョンでそれぞれのアプリは起動しようとするらしく、以下の例外で落ちてしまいます。(それぞれの app のトップレベルには、対応したバージョンの
`.ruby-version` は作成済みです)

**例外メッセージ:**

>
> /Users/yukiinoue/.anyenv/envs/rbenv/versions/2.7.2/lib/ruby/2.7.0/bundler/definition.rb:495:in
> `validate_ruby!': Your Ruby version is 2.7.2, but your Gemfile specified
> 2.6.5 (Bundler::RubyVersionMismatch)

# 質問

rbenv にて、親プロセスの ruby とは違うバージョンの ruby を起動するには、どうしたら良いのでしょうか?


CC BY-SA 4.0
2020-11-29T01:28:19.997
72261
2020-12-04T10:58:30.443
2020-11-30T00:40:05.287
3060
754
question
ruby rbenv
親の ruby-version とは異なる ruby-version でプロセスを実行したい


`rbenv`は`RBENV_VERSION=2.7.2`のような形で環境変数を渡してあげると `.ruby-version` を無視して
環境変数で指定されたバージョンで動作します。  
`foreman` を起動したときに `RBENV_VERSION` が設定されてるんだと思います。

[code]

    app1: cd app1 && eval "$(rbenv init -)" && rbenv shell $(cat .ruby-version) && bin/rails s
    app2: cd app2 && eval "$(rbenv init -)" && rbenv shell $(cat .ruby-version) && bin/rails s
    
[/code]

みたいな形で `rbenv shell` で環境変数を上書きすれば動きそうではあるんですが副作用的なものがないかは自信がないです。

個人的には制限がないのであれば、[hivemind](https://github.com/DarthSim/hivemind) をおすすめします。
基本的には `foreman` と同じ使い勝手で `RBENV_VERSION`
を設定しませんし、質問にある`Procfile`で動作してくれると思います。


CC BY-SA 4.0
2020-12-04T10:58:30.443
72397
2020-12-04T10:58:30.443
43000
72261
answer