0

capistrano でデプロイする Ruby アプリケーション (Rails 以外) があります。cdサーバーの/currentディレクトリにsshして、コマンドで起動できます

ruby tweet_tracker.rb start

ただし、レベルを上げて実行すると

ruby current/tweet_tracker.rb start

エラーが発生します:

/home/deploy/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- tweetstream (LoadError)
    from /home/deploy/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /home/deploy/dev/tweet_tracker/current/tweet_tracker.rb:4:in `<main>'

これは明らかに、各ディレクトリで異なる ruby​​ バージョンを使用してコマンドを実行しているためです。

.ruby-version指定するアプリケーションにファイルがありますruby-1.9.3-p392。私の capistrano デプロイ スクリプトは指定されset :rvm_ruby_string, '1.9.3-p392'ており、デプロイ プロセスの一部として実行bundle installされると、193-p392 の gem がインストールされます。

問題は、アプリケーション ディレクトリの外からアプリケーションを起動しようとすると、デフォルトの Ruby (RVM によって 193 の下位バージョンに設定されている) が使用されることです。

アプリケーションが実行時に指定された Ruby バージョンを確実に使用するようにするにはどうすればよい.ruby-versionですか?

システム上で他のアプリケーションが実行されているため、RVM のデフォルトの Ruby バージョンを変更したくありません。

4

2 に答える 2

0

プロジェクトの例を次に示します。

myproject/
├── .ruby-version
└── subproject/
    ├── .ruby-version
    └── script.rb

myproject/.ruby_version:

system

myproject/subproject/.ruby_version:

ruby-1.9.3-p392

私のプロジェクト/サブプロジェクト/script.rb:

puts RUBY_VERSION

今、あなたの問題は次のように模倣できると思います:

$ cd myproject
$ ruby subproject/script.rb
1.8.7
$ cd subproject
$ ruby script.rb
1.9.3

これを回避する 1 つの方法は、文書化されていないコマンドを使用することrvm execです。

$ cd myproject
$ rvm 1.9.3-p392 exec ruby subproject/script.rb
1.9.3

.ruby-versionファイルを自動的に読み取るように拡張できます。

$ rvm `cat subproject/.ruby-version` exec ruby subproject/script.rb
1.9.3
于 2013-04-24T19:48:49.963 に答える
0

RVM は、Ruby アプリケーションを呼び出すスクリプトを作成する際に非常に苦労することがよくあります。多くのユーザーが移行した、より優れたRuby バージョンのラッパーが存在します。RVM の主な問題の 1 つは、インタラクティブ シェルには適していますが、スクリプトにはあまり適していないことです。

after_cd主な問題は、RVM がフックをセットアップすることです。これは、対話型シェルでのみ得られるものです。その結果、ユーザーは次のような一連のコマンドを実行する必要があります。

cd $APPDIR
source /home/$APPUSER/.rvm/scripts/rvm
rvm rvmrc trust && rvm rvmrc load
bundle exec ./bin/server start

を使用rvm wrapperして、init スクリプトを生成できます。ただし、たとえば、Upstart 構成と統合するのはやや難しいです。

于 2013-04-24T19:54:50.907 に答える