2011-07-31 13 views
14

Rubyベースのデーモンを作成して、私のUbuntuサーバーの1つで動作させようとしています。私はこれが起動時に実行されるようにしたいので、起動ファイルを作成します。しかし、私はそれを使用して、さまざまな宝石を管理するためバンドラを使用して、サーバーにデプロイした後、これを実行するつもりました:様々なオプションがあることにより、バンドラ展開されたRubyアプリケーションを独自のディレクトリの外で実行しますか?

bundle install --deployment 

これは、いわゆる「配置モード」へバンドラを置きますすべての宝石はシステム全体ではなく「ベンダー」ディレクトリにインストールされます。しかし、これは宝石が終わるところ、これがあると、それが独自のディレクトリから実行する必要がありそれによって、それを実行して問題を作成します。

<in the app's dir> 
$ ./runmyapp 
<it runs> 

私は別の場所にcdし、それはそれはいっぱいです使用して実行しようとすると

<in another directory> 
$ /path/to/runmyapp 
<it crashes as it can't locate its gems> 

多くのバンドル業者のドキュメントを読んだことがありますが、このシナリオ全体は決してカバーされませんか?私は代わりにシステムに宝石をインストールする必要がありますか?私がやるべき他に何かありますか?

答えて

28

あなたのアプリの宝石管理者としてバンドラーを使用します。この場合、bundle execを使用することが、実行可能ファイルを実行する最善の方法だと思います。

Gemfileを含むディレクトリ以外のディレクトリからアプリケーションを実行する場合は、BUNDLE_GEMFILE(bundle help execを参照)を設定してGemfileの場所を設定する必要があります。以下はあなたに役立ちます:

BUNDLE_GEMFILE=/path/to/Gemfile bundle exec /path/to/runmyapp 
+1

私は 'bundle exec'がgemsの実行ファイルを実行するためのものだと思いました。つまり、gemfileに基づいて私のアプリケーション用にバンドルラーがインストールした宝石ですが、自分自身のものではありません。それは本当ですか? –

+0

'bundle exec'はあなたのgem環境での実行可能な実行ファイルです。 http://gembundler.com/man/bundle-exec.1.htmlからの引用: 'bundle-exec - バンドルのコンテキストでコマンドを実行する' – petRUShka

+0

これはこのように動作します。しかし、他の方法があるかもしれません。 – petRUShka

関連する問題