2011年6月4日土曜日

Redmine/Passenger/nginxの設定

nginxは始めてなので少し調べる。
ロシア製のWebサーバ/リバースプロキシで、同時にIMAP/POP3プロキシなのか。

消費リソースが少ない、設定が容易というのが魅力を感じる。

nginxのインストール
※passengerをインストールしてコマンドでnginxもインストールされるのでこの作業は行わなくて良い。
パッケージであるようだ
$ sudo apt-get install nginx
インストールされた。この後は何をしたら良いか分からないけど、
ドキュメントルーとを見つけて静的ファイルを表示してみよう。
$ man nginx
バージョンは-vで調べられる。
$ nginx -v
nginx version: nginx/0.7.67
-hでヘルプを見てみる。
うーん。-Vでコンフィグのオプションが見れるのか。
設定方法とかは分からないので、ネットで調べる。



blogをいくつか見たけど、どれが新しい情報か分からないので、
manに出ていた本家サイトを見る。
http://nginx.net/

情報はほとんど無くて、代わりに下記のリンクがある。
http://nginx.org/

!バージョンは1.0.4が最新のstableなのか。。。パッケージでインストールしたのは0.7.67。。。

ドキュメントを見る
virtual hostみたいに設定するのか。
0.8.21よる古いのはデフォルトサーバの指定はdefault_serverではなくてdefaultにすると。

指定していないサーバのアクセスをエラーにする場合は、server_nameが_をデフォルトにしておく。

IPベースのバーチャルサーバーが作れる。
ドキュメントルートはrootで指定するのかな。

設定の方法はなんとなく分かった。設定ファイルはどこにあるんだろう?
wikiに書いてある
http://wiki.nginx.org/GettingStarted/usr/local/nginx/conf/nginx.conf
というファイルがあるのか。

Ubuntuで見てみたけどない。
$ find /usr/ -name nignx.conf
を実行してみたけど見つからない。
http://articles.slicehost.com/2008/5/15/ubuntu-hardy-nginx-configuration//etc/nginx/nginx.conf
にあった。見てみる
$ less /etc/nginx/nginx.conf
serverブロックはない。
includeしているファイルで/etc/nginx/conf.d/*.confになにかあるか見てみたけど何もない。
$ ls /etc/nginx/sites-enabled/*
も見てみる。
$ less /etc/nginx/sites-enabled/default
にserverの記述があった。
localhostで/var/wwwがルート。
index.htmlがあるのかな。

サーバの起動は
http://wiki.nginx.org/NginxCommandLine
nginxで良いみたい。
$ nginx
[alert]: could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)
2011/06/02 21:18:06 [warn] 27302#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:12011/06/02 21:18:06 [emerg] 27302#0: mkdir() "/var/lib/nginx/body" failed (13: Permission denied)
sudoで実行してみる。
$ sudo nginx
sudo: cannot get working directory
パスワードをいれたけど、反応がない。
起動しているのかな?

http://localhost/
にアクセスすると403 Forbidden

http://localhost/index.html
は404 Not Found
動いている事は動いているみたい。
$ ps ax | grep nginx
26719 pts/13   S+     0:00 man nginx
27317 ?        Ss     0:00 nginx: master process nginx
27318 ?        S      0:00 nginx: worker process
27342 pts/7    S+     0:00 grep --color=auto nginx
master process nginx、worker processというのが起動している。
$ less /var/www/nginx-default/index.html
見ると、welcom to nginx!って出るはずなのだけれど。
/var/wwwにコピーしてみる。
$ sudo cp /var/www/nginx-default/index.html/var/www/
sudo: cannot get working directory
コピーされているけど、このcannot get working directoryって何だろう?
再起動はしないでアクセスしたら表示された!
/var/www/hoge.html
を作成してアクセスしてみたら、きちんと表示された。
http://localhost/nginx-default/index.html
にアクセスしたところ、Welcome to nginx!が表示された。
他のwebサーバのように、ファイルを置いたりディレクトリを作るとそのままアクセスできる。よし。

Redmineをインストール
http://redmine.jp/
1.2がリリースされているので、ダウンロード。
nginxとPassengerの連携はここを見る。
http://doruby.kbmj.com/8y/20100628/Redmine_nginx_Passenger_

解凍して移動
$ cd ~/Download
$ zxvf redmine-1.2.0.tar.gz
$ sudo mv redmine-1.2.0 /var/www/

ImageMagickはインストールしない。

Passengerのインストール
rvmを切り替えようと思ったけど、Rubyのバージョンは1.8系じゃないとだめらしい。
http://redmine.jp/guide/RedmineInstall/

Ruby 1.8.7をインストール
$ rvm install 1.8.7

インストールしている間にDBをインストール
DBはMySQLを使う。

MySQLのインストール
Synapticパッケージ・マネージャで
mysql-server-core-5.1をインストール
間違った。。。
mysql-server
というパッケージがあったので改めてそっちもインストール。
clientとかもインストールされる。
おっ、インストール中にmysqlのrootパスワードを聞かれるのか。

Ruby1.8.7のインストールが終わったので、gemでPassengerをインストール。どのgemからも利用したいと思うので、globalにインストールする
$ rvm use 1.8.7
$ rvm gemset use global
$ gem install passenger
ERROR:  Loading command: install (LoadError)
no such file to load -- zlib
ERROR:  While executing gem ... (NameError)
uninitialized constant Gem::Commands::InstallCommand

またこれ系か。
Ubuntuにインストールしてしまえば良いのかもしれないけど、rvmで出きることはrvmで対処する。

zlib、opensslは必要なのでインストールしておく。
irbが文字化けするといやなのでreadlineもインストール
$ rvm package install zlib openssl readline

...3つインストールされると思ったら先頭のzlibだけ。
1つづつインストール
$ rvm package install openssl

インストールしている途中にMySQLのインストールが終わった。
確認。
$ mysql -u root -p
mysql > show databases;

redmine用にユーザを作っておく。
create database redmine character set utf8;
create user 'redmine'@'localhost' identified by 'my_password';
grant all privileges on redmine.* to 'redmine'@'localhost';
exit
確認ok。

opensslのインストールがまだ終わらない。
$ rvm package install readline

zlibやopensslをインストールした後は、Rubyもインストールしなおす必要があるのかな?面倒だからそのままにしてPassengerをインストール
$ gem install passenger
ERROR:  Loading command: install (LoadError)
no such file to load -- zlib
ERROR:  While executing gem ... (NameError)
uninitialized constant Gem::Commands::InstallCommand
やっぱり駄目か。
Rubyをインストールしなおす。
$ rvm install 1.8.7 --with-zlib-dir=$rvm_path/usr --with-openssl-dir=$rvm_path/usr --with-readline-dir=$rvm_path/usr

インストール完了

passengerのインストールを再開
$ gem install passenger

あれ?インストール後にヒントって出てこないのか。
インストール先の確認
$ passenger-config --root
/home/k10i/.rvm/gems/ruby-1.8.7-p334@global/gems/passenger-3.0.7

と、ここまで来て、まずはRedmineをwebricで動かしてみる。
$ cd /var/www/redmine-1.2.0/
$ mv config/database.yml.example config/database.yml
$ vi config/database.yml

端末のパス部分が長い。
今更ながらbashのプロンプトを変更する。
.bashrcのrvmの設定の上に、下記を記述。
PS1="[\W]\$ "

$ vi ~/.bashrc
$ source ~/.bashrc

変わった。

引き続きRedmine
$ rake config/initializers/session_store.rb
(in /var/www/redmine-1.2.0)
Missing the i18n 0.4.2 gem. Please `gem install -v=0.4.2 i18n`

いやなエラーだな。i18nはgemを新しく作ってそっちを使うようにしよう。
[redmine-1.2.0]$ rvm gemset create redmine
'redmine' gemset created (/home/k10i/.rvm/gems/ruby-1.8.7-p334@redmine).
[redmine-1.2.0]$ rvm gemset use redmine
[redmine-1.2.0]$ gem install -v=0.4.2 i18n

端末のプロンプト部分を変えてからコピーしやすい。というか、表示されていても良い事にする。

インストール後にRedmineの続き
[redmine-1.2.0]$ rake config/initializers/session_store.rb
(in /var/www/redmine-1.2.0)
[redmine-1.2.0]$ rake db:migrate RAILS_ENV="production"
(in /var/www/redmine-1.2.0)
rake aborted!
RubyGem version error: rack(1.3.0 not ~> 1.1.0)

読み方を忘れた。これは、1.1.0じゃないと駄目って事じゃないはずだった気がするけど、1.1.0をインストールしておけば間違いないはず。
[redmine-1.2.0]$ gem install rack -v 1.1.0
再度migration
[redmine-1.2.0]$ rake db:migrate RAILS_ENV="production"
(in /var/www/redmine-1.2.0)
rake aborted!
/home/k10i/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/i686-linux/digest/md5.so: undefined symbol: rb_Digest_MD5_Init - /home/k10i/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/i686-linux/digest/md5.so

rb_Digest_MD5が無いっていわれてる。
そういえば、rubyのMySQL APIはインストールしていない。

MySQL APIはglobalにインストールする。
[redmine-1.2.0]$ rvm gemset use global
[redmine-1.2.0]$ gem install mysql
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

エラーがでた。ヘッダーファイルがない。devはインストールしていないはず。
エラーを見ると、lmsqlclientがnoになっているので、
libmysqlclient-devをSynapticパッケージ・マネージャからインストール

インストール後に再度MySQL APIインストール
$ gem install mysql
完了。

再度migration
[redmine-1.2.0]$ rvm gemset use redmine
[redmine-1.2.0]$ rake db:migrate RAILS_ENV="production"
/home/k10i/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/i686-linux/digest/md5.so: undefined symbol: rb_Digest_MD5_Init - /home/k10i/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/i686-linux/digest/md5.so

あれ?また同じエラーだ。
MySQL APIは必ず必要だからインストールして問題ないけど、何が足りないのだろう?調べる。

http://stackoverflow.com/questions/3545118/faulty-ruby-compilation-with-rvm-getting-undefined-symbol-rb-digest-md5-init
$ sudo apt-get install zlib1g-dev libreadline5-dev libssl-dev libxml2-dev

rvmで解決出きるのであれば解決したい。
rvmのopensslがうまくインストールされていないのかな?

[redmine-1.2.0]$ ls /home/k10i/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/i686-linux/digest/
bubblebabble.so  md5.so  rmd160.so  sha1.so  sha2.so

ファイルがあるけど、見れていないっぽいから、
rubyのインストールで--enable-sharedをつけた方が良かったのかな?
再度つけてインストールしてみる。
http://www.loveruby.net/ja//rhg/cd/build.html
$ rvm install 1.8.7 --enable-shared --with-zlib-dir=$rvm_path/usr --with-openssl-dir=$rvm_path/usr --with-readline-dir=$rvm_path/usr

再度migration
[ruby-1.8.7-p334]$ rake db:migrate RAILS_ENV="production"
rake aborted!
No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb)
/home/k10i/.rvm/gems/ruby-1.8.7-p334@global/gems/rake-0.8.7/lib/rake.rb:2377:in `raw_load_rakefile'

お、進んだけどまた違うエラー。パスを変更したのを戻していなかった。
[redmine-1.2.0]$ rake db:migrate RAILS_ENV="production"
(in /var/www/redmine-1.2.0)
rake aborted!
/home/k10i/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/i686-linux/digest/md5.so: undefined symbol: rb_Digest_MD5_Init - /home/k10i/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/i686-linux/digest/md5.so

やっぱり同じエラーが出てしまう。参ったな。。。

rvmでのインストールは一度削除しないと駄目なのかな?
やってみる。
$ rvm remove 1.8.7
$ rvm install 1.8.7 --enable-shared --with-zlib-dir=$rvm_path/usr --with-openssl-dir=$rvm_path/usr --with-readline-dir=$rvm_path/usr
$ rvm gemset use redmine
$ rake db:migrate RAILS_ENV="production"

!!!うまくインストールできた。最初からremoveしておけば--enable-sharedは必要なかったのかな?もしかして先日のlibxml2もそうなのだろうか。。。

削除しようと思ったのは、
http://blesseddlo.wordpress.com/2010/07/30/install-redmine-on-centos5rhel5/
を見て。

進む。
$ mkdir tmp public/plugin_assets
mkdir: ディレクトリ `tmp' を作成できません: ファイルが存在します
mkdir: ディレクトリ `public/plugin_assets' を作成できません: ファイルが存在します

よしとしよう。。。
$ sudo useradd redmine
$ sudo passwd redmine
$ sudo chown -R redmine:redmine files log tmp public/plugin_assets
$ sudo chmod -R 755 files log tmp public/plugin_assets
$ ruby script/server webrick -e production
/home/k10i/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/fileutils.rb:243:in `mkdir': Permission denied - /var/www/redmine-1.2.0/tmp/pids (Errno::EACCES)

あれ?パーミッションがない。そうだよな...redmineユーザじゃないし。。。
元に戻そう。
$ sudo chown -R k10i:k10i files log tmp public/plugin_assets
$ ruby script/server webrick -e production

http://127.0.0.1:3000/
admin/admin

アクセスできた。言語は日本語させておこう。
右上のMyAccountで、言語のリストボックスから日本語を選択して保存。
日本語になりました。

Redmineのインストールは完了。
それにしてもVM/UbuntuのせいなのWebricのせいなのか分からないけどサイトが凄く遅い。

nginxをwebサーバにしてRedmineを表示させる
webricはCtrl+cで落としておく
http://www.modrails.com/install.html
$ passenger-install-nginx-module
おぉ、見慣れた最初の設定が出てきた。

足りないライブラリを教えてくれる。
gccもインストールされていなかったのね。。。

opensslとかzlibとかインストールの必要が出てきた。
rvmでいれたのは使えないのかな?(オプションとかあるのかも知れないけど)もうUbuntuでインストールしよう。
$ sudo apt-get install build-essential libcurl4-openssl-dev libssl-dev zlib1g-dev
E: ロック /var/lib/dpkg/lock が取得できませんでした - open (11: リソースが一時的に利用できません)
E: 管理用ディレクトリ (/var/lib/dpkg/) をロックできません。これを使う別のプロセスが動いていませんか?

Synapticパッケージ・マネージャが起動しているのか。一度閉じてインストールコマンドを実行。
インストール後に再度実行
$ passenger-install-nginx-module
おぉ。nginxはここでインストール出きるのか。パッケージでインストールする必要なかったな。恐らくカスタムでインストールしようとするとオプションとか指定しないといけないんだろうな。

ここはダウンロードしてNginxをインストール。recommendedとなっているし。
Permission problems
This installer must be able to write to the following directory:
/opt/nginx
But it can't do that, because you're running the installer as k10i.
Please re-run this installer as root.
...sudoで実行しないとだめか。
$ sudo passenger-install-nginx-module
sudo: passenger-install-nginx-module: command not found
あれ?コマンドがない。
$ which passenger-install-nginx-module
/home/k10i/.rvm/gems/ruby-1.8.7-p334@global/bin/passenger-install-nginx-module
$ sudo /home/k10i/.rvm/gems/ruby-1.8.7-p334@global/bin/passenger-install-nginx-module
Could not find RubyGem passenger (>= 0)
これは駄目か。

調べる
http://www.postal-code.com/binarycode/2008/05/21/installing-passenger-mod_rails-command-not-found/

直接実行すれば大丈夫なのか。
gemのロードパスを追加してみよう。
$ export GEM_PATH=/home/k10i/.rvm/gems/ruby-1.8.7-p334@redmine:/home/k10i/.rvm/gems/ruby-1.8.7-p334@global
$ export PATH=${GEM_PATH}/bin:$PATH
$ sudo /home/k10i/.rvm/gems/ruby-1.8.7-p334@global/bin/passenger-install-nginx-module/home/k10i/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/site_ruby/1.8/rubygems.rb:900:in `report_activate_error': Could not find RubyGem passenger (>= 0) (Gem::LoadError)

駄目か。rvmにpassengerをインストールするものでも無いのかな。

! rvmsudoというコマンドがあった。
http://www.blog.bridgeutopiaweb.com/post/install-rvm-passenger-nginx-and-rails-3-on-ubuntu-lucid-lynx/
$ rvmsudo passenger-install-nginx-module
インストールできた!インストール後のコメントは下記。
Nginx with Passenger support was successfully installed.
The Nginx configuration file (/opt/nginx/conf/nginx.conf)
must contain the correct configuration options in order for Phusion Passenger
to function correctly.
This installer has already modified the configuration file for you! The
following configuration snippet was inserted:
http {
...
passenger_root /home/k10i/.rvm/gems/ruby-1.8.7-p334@global/gems/passenger-3.0.7;
passenger_ruby /home/k10i/.rvm/wrappers/ruby-1.8.7-p334@redmine/ruby;
...
}
After you start Nginx, you are ready to deploy any number of Ruby on Rails
applications on Nginx.
Press ENTER to continue.
--------------------------------------------
Deploying a Ruby on Rails application: an example
Suppose you have a Ruby on Rails application in /somewhere. Add a server block
to your Nginx configuration file, set its root to /somewhere/public, and set
'passenger_enabled on', like this:
server {
listen 80;
server_name www.yourhost.com;
root /somewhere/public;   # <--- be sure to point to 'public'!
passenger_enabled on;
}
And that's it! You may also want to check the Users Guide for security and
optimization tips and other useful information:
/home/k10i/.rvm/gems/ruby-1.8.7-p334@global/gems/passenger-3.0.7/doc/Users guide Nginx.html
Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-)
http://www.modrails.com/
Phusion Passenger is a trademark of Hongli Lai & Ninh Bui.

パッケージでインストールしたnginxが起動しているのでストップさせる。
[redmine-1.2.0]$ ps ax | grep nginx
22467 pts/7    S+     0:00 grep --color=auto nginx
27317 ?        Ss     0:00 nginx: master process nginx
27318 ?        S      0:00 nginx: worker process
[redmine-1.2.0]$ sudo nginx -s stop
起動
[redmine-1.2.0]$ sudo /opt/nginx/sbin/nginx
http://localhost
にアクセス。
Welcome to nginx!が表示された。

Redmineのドキュメントルートを設定する。
passenger_enabled onとrootを設定
server {
listen       80;
server_name  localhost;
passenger_enabled on;
root /var/www/redmine-1.2.0/public;
#charset koi8-r;
.
.
.
$ sudo /opt/nginx/sbin/nginx -s stop
$ sudo /opt/nginx/sbin/nginx

アクセスしてみる。
あれ?変わらない。指定した場所が悪いのかな。

locationのrootをコメントアウトしてみる。
$ sudo vi /opt/nginx/conf/nginx.conf
location / {
#            root   html;
index  index.html index.htm;
}
403 Forbidden

.rvmrcを書いてみる。
[redmine-1.2.0]$ vi .rvmrc
rvm use 1.8.7@redmine
[redmine-1.2.0]$ cd .
$ sudo /opt/nginx/sbin/nginx -s stop
$ sudo /opt/nginx/sbin/nginx

403 Forbidden
...
publicにおいてみる
[redmine-1.2.0]$ cp .rvmrc public/.rvmrc
[public]$ cd public/
$ sudo /opt/nginx/sbin/nginx -s stop
$ sudo /opt/nginx/sbin/nginx

403 Forbidden
...
$ rvm 1.8.7 --passenger
$ sudo /opt/nginx/sbin/nginx -s stop
$ sudo /opt/nginx/sbin/nginx

403 Forbidden
...
うーん。passengerはrvmでインストールしなくても良かったな。。。
でも勉強。
$ sudo reboot
リブートしてみる。
なんか、凄く早くなった。
$ sudo /opt/nginx/sbin/nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
パッケージでインストールしたのが自動起動している。
$ sudo nginx -s stop
$ sudo /opt/nginx/sbin/nginx
403 Forbidden
...
変わらない。やっぱり設定が悪いんだろうな。

一日経った。再開。
落ち着いてやっていこう。

403って事はアクセス権がないのかな。
調べる。
ログには何か出ているかな。
$ tail -f /opt/nginx/logs/access.log
アクセスすると、きちんとアクセスログは書き込まれる。
$ tail -f /opt/nginx/logs/error.log
2011/06/03 19:33:19 [error] 2233#0: *3 directory index of "/var/www/redmine-1.2.0/public/" is forbidden, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", host: "localhost"
エラーログにも書き込まれている。
rootでの指定された箇所は参照されている。
ただしforbidden。
publicがrootになっているので、public/500.htmlにアクセスしてみる。
http://localhost/500.html
おっ、Internal errorのページが表示された。これはファイルどおりなのかな。
試しに、hoge.htmlを作ってアクセス。
きちんとアクセスできた。

ファイルが無いときはどんなエラーだろう。fuga.htmlにアクセス
404 Not Foundか。

indexの読み込みができていないよう。
public/index.htmlを作成してみる。
これはきちんと表示される。

redmineのコントローラーを確認。
webricでもう一度起動。
$ cd /var/www/redmine-1.2.0
$ rails server
プログラム 'rails' はまだインストールされていません。  次のように入力することでインストールできます

あれ?Railsがインストールされていない。
そっか。Rails2か。
$ script/server
/var/www/redmine-1.2.0/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:620:in `real_connect': Access denied for user 'root'@'localhost' (using password: NO) (Mysql::Error)
おっ、MySQLが起動していない。再起動させたからだろう。
起動はどうやってするんだろう。調べる。Redhat系のserviceがあるはず。

serviceコマンドがあった。
$ sudo service mysql start
start: Job is already running: mysql
あれ?起動しているのかな。
$ ps ax | grep mysql
1019 ?        Ssl    0:01 /usr/sbin/mysqld
なにか動いてる。

再度Redmineを起動と思ったら、-eがぬけているじゃないか。
$ script/server webrick -e production
起動した。
http://127.0.0.1:3000/
にアクセスしてみる。

あれ?index.htmlって表示されている。nginxで書いたのが表示されている。テスト用で書いたpublic/index.htmlは削除。

Ctrl+zでwebricをバックグラウンドに移動させて
$ rm public/index.html
fgでフォアグラウンドに戻す。

アクセス。普通のredmineの画面。
ログインのページは
/loginなのか。

nginxでアクセスしてみよう。
http://http://localhost/login

404 Not Found

おっ、passengerを経由できていないっぽいぞ。

rvm+Nnginxでの記事があった。
https://rvm.beginrescueend.com/integration/passenger/

passengerのバージョンは3がインストールされている
$ passenger -v
Phusion Passenger version 3.0.7
.rvmrcに追加するのか。

どこのだろう。public以下に作るのかな?
昨日、試しに作ったのが残っているので、そちらを編集。
$ vi public/.rvmrc
if [[ -s "/Users/k10i/.rvm/environments/ruby-1.8.7-p334@redmine" ]] ; then
. "/Users/k10i/.rvm/environments/ruby-1.8.7-p334@redmine"
else
rvm --create use  "ruby-1.8.7-p334@redmine"
fi

config/setup_load_paths.rbを追加
if ENV['MY_RUBY_HOME'] && ENV['MY_RUBY_HOME'].include?('rvm')
begin
rvm_path     = File.dirname(File.dirname(ENV['MY_RUBY_HOME']))
rvm_lib_path = File.join(rvm_path, 'lib')
$LOAD_PATH.unshift rvm_lib_path
require 'rvm'
RVM.use_from_path! File.dirname(File.dirname(__FILE__))
rescue LoadError
# RVM is unavailable at this point.
raise "RVM ruby lib is currently unavailable."
end
end

アクセスしてみよう。
403のまま。再起動が必要かな。
[redmine-1.2.0]$ sudo /opt/nginx/sbin/nginx -s stop
[sudo] password for k10i:
[redmine-1.2.0]$ sudo /opt/nginx/sbin/nginx

うーん。403のままだ。
passengerはglobalにインストールしたから.rvmrcではglobalを読み込んでみる。
念のため再起動。
駄目だった。。。

publicじゃなくて、rootに置いても駄目だった。うーん。

redmine(Rails2)は諦めて、rails3で動かしてみる。
$ cd ~/Desktop/hoge
Using /home/k10i/.rvm/gems/ruby-1.9.2-p180 with gemset fwiffer
$ gem install passenger
$ sudo vi /opt/nginx/conf/nginx.conf
passenger_root /home/k10i/.rvm/gems/ruby-1.9.2-p180@fwiffer/bin/passenger;
passenger_ruby /home/k10i/.rvm/rubies/ruby-1.9.2-p180/bin/ruby;
root /home/k10i/Desktop/hoge/public;

$ sudo /opt/nginx/sbin/nginx
セグメンテーション違反です

なんだこれ。passenger_rootが悪いみたい。

うーん。もう一度passengerのコマンドを実行してみる。
$ rvmsudo passenger-install-nginx-module

passenger_root /home/k10i/.rvm/gems/ruby-1.9.2-p180@fwiffer/gems/passenger-3.0.7;
と記述する必要があるのか。
さっきは、which passengerでのパスを書いた。
修正してnginxを起動

おぉ!動いた。Rails3には、publicの下に.rvmrcとか置いていない。ただnginx.confを修正しただけ。
うーん。

あれ?
http://localhost
ではRailsのトップが表示されるけど、
http://localhost/posts
にアクセスすると404 Not Foundだって。

production環境はmigrationしていなかったからかな?
$ rake db:migrate RAILS_ENV=production
$ touch tmp.restart.txt

関係ないか。そもそも動いていたのかな?
[hoge]$ rails server -e production

http://127.0.0.1:3000/
Routing Error
...何これ。

nginxからはアクセスできたのじゃなかったのかな?
http://127.0.0.1:3000/users
こっちはアクセスできる。

productionだと、index.htmlは読み込まないのか。
[hoge]$ rails server 
だと、
http://127.0.0.1:3000/
でアクセスできた。

passengerが動作していないような感じだよな。

おぉ!
passenger_enabled on;
をserverの下ではなくて、
location /
の下に記述したらエラーが変わった。
no such file to load -- bundler

bundlerが読み込めていない。

@fwifferがパスに出ているということはきちんとgemは読み込まれていると思うのだけれど。

https://rvm.beginrescueend.com/integration/passenger/
config/setup_load_paths.rb
を作成。(.rvmrcは記述していない)

作成後、
$ touch tmp/restart.txt
して再度アクセス。

no such file to load -- rack

おっ、進んでいるのかな?
config/setup_load_paths.rbの
下記のコメントを外して再度アクセス(今度はrestartしない)
# ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', File.dirname(__FILE__))
# require 'bundler/setup

no such file to load -- bundler/setup
また変わった。

でもこれは違うと思うので、rackのエラーまで戻す。

先ほどのページの下部に
For Nginx users, replace the passenger_ruby line with:
passenger_ruby /home/wayne/.rvm/bin/passenger_ruby;
と書いてあったので、書き換えてnginxを再起動。
Cannot spawn application '/home/k10i/Desktop/hoge': Could not read from the spawn server: Connection reset by peer (104)

エラーが変わった。なんだろう。

nginxのエラーログを見ると、
Passenger ERROR (ext/common/ApplicationPool/../SpawnManager.h:220):
Could not start the spawn server: /home/wayne/.rvm/bin/passenger_ruby: No such file or directory
それはそうだ。wayneのままだ。

修正して再起動。

。。。エラーが変わった。
The given ruby environment requires ruby-1.9.2-p180 (versus ruby-1.8.7-p334) (RVM::IncompatibleRubyError)

...できた!
http://beginrescueend.com/integration/passenger/
を見て、--passengerを実行。
$ rvm 1.9.2 --passenger
$ rrvm wrapper 1.9.2@fwiffer passenger

整理しないと駄目だな。
凄く時間がかかりました。

これ、redmineも動くかな。
動きました。

nginx.confで、
passenger_root

rootを変更。
passenger_rubyはそのまま。
それで、
$ rvm 1.8.7 --passenger
を実行してniginxを再起動。

なるほど。そうしたらsetup_load_paths.rbや、.rvmrcは必要なのかな?

新しくRails3アプリを作って実験
$ cd ~/Desktop
$ rvm use 1.9.2@fwiffer
$ rails new fuga
nginx.confのpassenger_rootとrootを変更
nginxを再起動。
アクセスして、About your application’s environmentをクリック。

no such file to load -- bundler

と表示される。
setup_load_paths.rbが必要なのか。
[fuga]$ cp ../hoge/config/setup_load_paths.rb config/
再起動はしないで、再度確認。

no such file to load -- bundler/setup

始めてのエラーだ。

.rvmrcもコピー
再起動はしない。
The rvmrc located in '/home/k10i/Desktop/fuga' could not be loaded, likely due to trust mechanisms. Please run 'rvm rvmrc {trust,untrust} "/home/k10i/Desktop/fuga"' to continue, or set rvm_trust_rvmrcs_flag to 1. 

なるほど。一度有効にする必要があるのか。
[fuga]$ cd .
再起動はしない
The given ruby environment requires ruby-1.9.2-p180 (versus ruby-1.8.7-p334)
nginxを再起動してみよう。
駄目だ。

このエラーは
rvm x.x.x --passenger
を実行すれば大丈夫なはず
$ rvm 1.9.2 --passenger
nginxを再起動

うまく表示できた。
rvm+passenger+Railsは、
setup_load_paths.rbも.rvmrcも必要。

0 件のコメント:

コメントを投稿