問題:Apache/PassengerがRVMを認識しない
正規の手順に従って、RVMのマルチユーザーインストールがあります: http://beginrescueend.com/rvm/install/
次に、/ etc/profile.d/rvm.shを編集して、次の行を含め、Ruby 1.9がログインしているすべてのユーザーに使用されるバージョンになるようにしました。
rvm use --default 1.9.2
システムに少なくとも3人のユーザーがいます:
ubuntuおよびpassengerにインタラクティブにログインすると、以下が正しく返されます。
$ Ruby -v
Ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]
ただし、実際にこれらの要求を処理するwww-dataユーザーは、/ etc/profile.d/rvm.sh(またはprofile.d内の何か)を実行することはありません。 。その結果、www-dataユーザーとしてログインすると、常に次のことが発生します。
$ Ruby -v
Ruby 1.8.7 (2010-08-16 patchlevel 302) [x86_64-linux]
この結果、Bundlerは私の開発サンドボックスで正しいRubyバージョンで正常に実行されますが、「GemをRubyにインストールできませんでした」実行時の1.8 "タイプのエラー:
$ cap deploy
<snip>
* executing "cd /var/www/app/releases/20111031001406 && bundle install --gemfile /var/www/app/releases/20111031001406/Gemfile --path /var/www/app/shared/bundle --deployment --quiet --without development test"
servers: ["example.com"]
[example.com] executing command
</snip>
(example.comとアプリは私の実サーバーとアプリケーションのプレースホルダーです)
私が受け取るエラーは、「linecache gem require Ruby> 1.9)」のチューニングです。これにより、Ruby 1.9.2が実行されていないことがわかります。問題。
ApacheにRVMとRuby必要なバージョンを認識させるにはどうすればよいですか?(RVMとRubyマルチユーザーパターンに従って、/ usr/local/rvm内にインストールしたい
私は何度も思いつくすべての指示に従いましたが、明らかにここで何かが欠けています。ここでのガイダンスをいただければ幸いです。
FWIW、これは私のCapistranoデプロイスクリプトです。
# if you're still using the script/reapear helper you will need
# # these http://github.com/Rails/irs_process_scripts
#
# # bundler bootstrap
require 'bundler/capistrano'
set :Nice_name, "App"
set :application, "app"
set :domain, "example.com"
role :web, "#{domain}" # Your HTTP server, Apache/etc
role :app, "#{domain}" # This may be the same as your `Web` server
role :db, "#{domain}", :primary => true # This is where Rails migrations will run
# # server details
set :default_run_options, {:pty => true}
set :ssh_options, {:forward_agent => true, :keys => "/path_to/ssh.key"}
#ssh_options[:keys] = [File.join(ENV["HOME"], ".ssh", "id_rsa")]
set :deploy_to, "/var/www/#{application}/"
set :user, "passenger"
set :use_Sudo, false
# repo details
set :scm, :git
set :scm_username, "githubuser"
set :repository, "git://github.com/githubuser/app.git"
set :branch, "master"
set :git_enable_submodules, 1
# tasks
namespace :deploy do
task :start, :roles => :app do
run "touch #{current_release}/tmp/restart.txt"
end
task :stop, :roles => :app do
# Do nothing.
end
desc "Restart Application"
task :restart, :roles => :app do
run "touch #{current_release}/tmp/restart.txt"
end
desc "Symlink shared resources on each release - not used"
task :symlink_shared, :roles => :app do
#run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
end
end
namespace :passenger do
desc "Restart Application"
task :restart do
run "touch #{current_path}/tmp/restart.txt"
end
end
after :deploy, "passenger:restart"
after 'deploy:update_code', 'deploy:symlink_shared'
おそらく、使用するRuby)のバージョン(RVMによって制御されるバージョン)を指すようにPassengerRoot
およびPassengerRuby
ディレクティブを設定する必要があります。まだ行っていない場合は、アプリごとに1つのgemsetを使用することもお勧めします。Apacheディレクティブが正しく設定されている限り、任意のgemsetにpassengerをインストールすることもできます。
例(reeとUbuntuを使用):
Sudo apt-get install build-essential bison openssl libreadline5 libreadline5-dev curl zlib1g zlib1g-dev libssl-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev autoconf libc6-dev ncurses-dev libmysqlclient15-dev Apache2-prefork-dev Apache2-mpm-prefork libapr1-dev libaprutil1-dev libcurl4-openssl-dev
rvm use ree@${gemset_here} --create --default --passenger
rvm ree@${gemset_here} gem install passenger --version="${PASSENGER_VERSION}"
passenger-install-Apache2-module --auto --apxs2-path $(which apxs2)
ディストリビューションに適切なビルド依存関係を取得する必要がある場合があります。パッセンジャーのコンパイル後、それを構成していることを確認する必要があります(出力を確認してください)。使用するApacheconfスニペットが必要な場合は、次を実行します。
passenger-install-Apache2-module --snippet
私は/etc/Apache2/conf.d/passenger.conf
(Ubuntuシステム上)に私のものを置きました。構成ディレクトリは、ディストリビューションによって異なる場合があります。この時点でまだ問題が発生する場合は、使用しているRVMgemsetディレクトリのいくつかのアクセス許可を修正する必要がある可能性があります。