1

次のコードは、Rails アプリのルート フォルダー内に存在し、デーモン化/実行しmyserver.rbます。

# myserver_control.rb

require 'rubygems'
require 'daemons'    # causes 'no such file to load -- daemons' error since gem reinstall with rvm

@options = {
    # options defined
}

Daemons.run('myserver.rb', @options)

rvm をインストールするまで問題なく動作していましたが、デーモンの gem が見つからないようです。上記は、システム全体のフォルダーのどこかにあるdaemons gemを検索しているのではないでしょうか? rvm にインストールされたデーモン gem を使用する代わりに? Daemons gem を見つけることができるシステム レベルにインストールするにはどうすればよいですか? または、rvm がインストールされた gem を見つけられるようにするにはどうすればよいですか?

現在、「システム」の宝石セットさえ持っていません。rvm をインストールした後、システム レベルで gem をインストールするにはどうすればよいですか?

4

2 に答える 2

1

システムの ruby​​ と gems を使用する場合は、次のように入力できます。

rvm use system

これにより、システムにインストールされたルビーと宝石を使用できるようになりますが、これはRVMを使用する目的に反すると思います。代わりに、RVMにデフォルトのルビーをインストールし、そこに宝石をインストールします。インストール後にデフォルトの Ruby を設定するには、次のように入力します。

rvm --default use 1.9.2

編集

コメントに基づいて、問題はsudoの実行にあり、これにより新しいサブシェルとrvmの異なるインスタンスが作成されます

于 2013-01-02T16:16:31.350 に答える
0

RVM は gemset の概念を使用します。gemset は、使用できる gem の一意のグループであり、ほとんどの場合は ruby​​ バージョンに固有です (ただし、アプリケーションまたはグローバルに固有にすることはできます)。

Ruby のバージョンを変更すると、RVM は GEM_HOME を変更します。これにより、gem がインストールされている場所が ru ygems に通知されます。したがって、RVM をインストールすると、新しい空の gemset が作成され、RVM は ruby​​gems にそれを使用するように指示します。

これは、gem が ruby​​gem 間で常に相互互換性があるとは限らないためです。

ただし、Rails アプリを作成するだけの場合は、今のところ上記を無視して、bundler を使用する必要があります。'gem "daemon"' を配置します。私はあなたの Gemfile であり、アプリのルート ディレクトリから bundle update を実行します。

バンドルは、アプリごとに gem を維持するのに役立ちます。つまり、他の場所で gem をアップグレードしても、アプリが壊れることはありません。それを使用し、それがどのように機能するかを知ることは、ベスト プラクティスです。幸運を。

于 2013-01-02T16:28:55.653 に答える