Archive for category さくらインターネット

Ruby on Rails覚えるだ Rails application failed to start properlyが出てどうにもならない

さくらインターネットにデプロイしようとしてにっちんもさっちんも行かなくなっている今日この頃です。

で、非常にいい感じの情報をゲットしたのでシェアしたい。

デプロイにおいて、500や403エラーもやたらと出るが、多分最後に出てくるのが
Rails application failed to start properly
ではないだろうか。

Application error
Rails application failed to start properly"

こんなの。
ログにも何もでないし、問題解決のしようがない。
そこで銀の銃弾とはならないものの、どこが悪いのかおぼろげに
見える素敵手法がある。
プロジェクトのpublic/フォルダに移動し、

ruby dispactch.cgi

を行うと、rails内でのエラーを吐いてくれるので、
お試しあれ。

ウチの場合はこんなん出た。原因究明はまだ。

%ruby dispatch.cgi
/home/xxxx/rails/xxxx/vendor/rails/actionpack/lib/action_controller/cgi_process.rb:22:in `__send__': undefined method `env_table' for nil:NilClass (NoMethodError)
    from /home/xxxx/rails/xxxx/vendor/rails/actionpack/lib/action_controller/cgi_process.rb:22:in `dispatch_cgi'
    from /home/xxx/rails/xxxx/vendor/rails/actionpack/lib/action_controller/dispatcher.rb:101:in `dispatch_cgi'

    from /home/xxxxx/rails/xxxx/vendor/rails/actionpack/lib/action_controller/dispatcher.rb:27:in `dispatch'
    from dispatch.cgi:12

ただ、railsのバージョンによっては自動に生成されないので注意が必要。
そういう時はやや見苦しいが、ダミープロジェクトを作成し、

rails -D dummy

と入れることでpublic内にdispatch.cgiが作成されるので、それをコピペすると良い。

dispatch.cgiの一行目の

#!/usr/bin/ruby

を自分の環境に合わせることもお忘れなく。

参照リンク
http://www.hostingrails.com/faq#rails_failed_to_start 正直激お役立ちサイトなので暇を見ては訳す。

さくらインターネットでRubyonRailsを使用する その2 ~デプロイ~

前回に引き続き、さくらインターネットへRubyonRailsのプロジェクトをデプロイする。

とりあえず試したい!という人は、適当にどこかからサンプルプロジェクトを引っ張ってきましょう。
WindowsならInstantRailsにCookbookなんかのサンプルがあるので、それを使うと良い良い。
ただ、前回の環境構築で設定したバージョンが合っている事を確認する必要がある。

まず、データベースの設定から。

開発環境時に使っていたdatabase.ymlはあくまでローカル用に最適化された設定なので、あまり役に立たない。
さくらインターネット側で使うデータベースの情報は、さくらインターネットのサーバーコントロールパネル内の
データベースの設定を参照することで入手できる。

まだデータベースを作成していない場合はさくっと作ってしまいましょー。
で、下記画像にある情報とdatabase.ymlとの対応は以下の通り。

WS000099

production:

  adapter: mysql
  encoding: utf8
  database: ①
  username: ②
  password: ④
  host: xxxxxxxxx.db.sakura.ne.jp

プロジェクトのデータベース構造をマイグレートする。

rake db:migrate RAILS_ENV="production"

見事成功。

次は実行環境もちゃんと設定する。
config/environment.rbの先頭行に以下を追加。

# Be sure to restart your server when you modify this file
$LOAD_PATH.push("$HOME/local/lib/ruby/site_ruby/1.8")
$LOAD_PATH.push("$HOME/local/lib/ruby")
ENV['GEM_HOME'] ||= '$HOME/local/lib/ruby/gem'
ENV['RAILS_RELATIVE_URL_ROOT']="/test"

ENV['RAILS_RELATIVE_URL_ROOT']=の先は作成したRailsのプロジェクト名にすること。
また上記各種パスは前回~/.cshrcに設定したものと同じにすること。

で、さっそくいつもどおりにサーバーを起動してみる。

ruby script/server

500 Internal Server Errorが出た。

ちょっと調べてみたところ、ちゃんとproductionで起動してない模様。
たぶんどっかのファイルで設定できると思うのだけど、横着して引数で何とかする。

ruby script/server -e production

まぁ、ただ実際の運用でアドレスに:3000なんて出すのはちょっと頂けないので、Apacheを使った方法においおい切り替えたほうがいいのかも。

参考リンク
http://iwatakenichi.blogspot.com/2007/08/ruby-on-rails-on-sakura-part3.html
http://nyon2.net/archives/2009/01/ruby-on-railsruby-on-rails.html

さくらインターネットでRubyonRailsを使用する その1 ~開発環境とのバージョンを合わせる~

さくらインターネットはご存知だろうか?

メールサーバやSSHログインして結構自由にできちゃうレンタルサーバなんかを
かなり安価な値段で使えるインフラ屋さんである。
昔はさくらのフレッツ接続って固定IPが標準でついてくる超激安ISPもやっていたのだが、
大分前から新規募集を停止してしまっている。
…何時の日か復活して欲しいものである。

話がそれた。で、このさくらインターネット、結構RubyonRailsをデプロイする先としては有名で、
色んなところで取り上げられている。もちろんここでも取り上げる。
特にローカル環境で開発したアプリケーションをさくらにアップして動かせるようにするということを目的に行う。

そのためただ環境を構築するだけでなく、ちゃんと開発環境とあわせるようにする。

さくらインターネットでのRubyonRailsのデプロイ方法をメモ。まずは開発環境とのバージョン合わせから。
実際のデプロイ作業に関しては次回。

まず、RailsやRubyが初期状態ではさくらインターネット側の更新に影響されてしまうので、
ローカルでバージョンを固定して使用できるようにする。

開発していた環境と同じRubyとRailsにする。
この場合は

Ruby=1.8.6
Rails=2.2.2

とする。
このあたりは各自の事情とか状況とか欲望とかに合わせて設定してくだちい。

ちょっと場所が場所なのでファイルの場所に注意する。

mkdir src
cd src/

wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-p383.tar.gz

tar zxvf ruby-1.8.6-p383.tar.gz

cd ruby-1.8.6-p383

./configure --prefix=$HOME/local

make

make install

vi ~/.cshrc

setenvと書かれているところに

setenv RUBYLIB $HOME/local/lib/ruby/1.8:$HOME/local/lib/ruby
setenv GEM_HOME $HOME/local/lib/ruby/gem

を追加する。一行目がRubyのパスで、二行目がこれから入れるRubyGemsのパスとなる。

set path = ( $HOME/local/bin $HOME/local/lib/ruby/gem/bin /sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin $HOME/bin )

setenv  EDITOR  vi
setenv  PAGER   more
setenv  BLOCKSIZE       K
setenv  PKG_DBDIR       ~/db/pkg
setenv RUBYLIB $HOME/local/lib/ruby/site_ruby/1.8:$HOME/local/lib/ruby
setenv GEM_HOME $HOME/local/lib/ruby/gem

で、次はGemsのインストール。
cd $HOME/src/

wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz

tar zxvf rubygems-1.3.5.tgz

cd rubygems-1.3.5

ruby setup.rb

そして仕上げのRailsインストール。
バージョンを指定してインストールすることを忘れない。
gem install rails -v2.2.2 --include-dependencies

%ruby -v
ruby 1.8.6 (2009-08-04 patchlevel 383) [i386-freebsd7.1]

%rails --version
Rails 2.2.2

うまくいったようだ。ではさっそくデプロイ前にテストしてみる。

rails test
/home/xxxxxxx/local/lib/ruby/gem/gems/rails-2.2.2/bin/../lib/rails_generator/options.rb:32:in `default_options': undefined method `write_inheritable_attribute' for Rails::Generator::Base:Class (NoMethodError)
        from /home/xxxxxxx/local/lib/ruby/gem/gems/rails-2.2.2/bin/../lib/rails_generator/base.rb:90
        from /home/xxxxxxx/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
        from /home/xxxxxxx/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'

        from /home/xxxxxxx/local/lib/ruby/gem/gems/rails-2.2.2/bin/../lib/rails_generator.rb:34
        from /home/xxxxxxx/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
        from /home/xxxxxxx/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'

        from /home/xxxxxxx/local/lib/ruby/gem/gems/rails-2.2.2/bin/rails:13
        from /home/xxxxxxx/local/lib/ruby/gem/bin/rails:19:in `load'
        from /home/xxxxxxx/local/lib/ruby/gem/bin/rails:19

…うまくいかないのが醍醐味だよねー

いつもの如くググりんぐ。

require 'rubygems'
require 'activesupport'

を試してみよとのこと。

irb
require 'rubygems'
=> true
require 'activesupport'
LoadError: no such file to load -- iconv

どうやら参考サイトと同様の現象のよう。安心した。

で、対処作。
先ほどRubyをインストールするときに展開したフォルダへ移動する。

cd $HOME/src/ruby-1.8.6-p383/ext/iconv/

ruby extconf.rb --prefix=$HOME --with-iconv-dir=/usr/local

make

make install

/usr/bin/install -c -m 0755 iconv.so /home/xxxxxxx/local/lib/ruby/site_ruby/1.8/i386-freebsd7.1

と表示されれば成功。では改めて

cd $HOME/rails/

rails test
      create 
      create  app/controllers
      create  app/helpers
      create  app/models
      create  app/views/layouts
      create  config/environments
      create  config/initializers
      create  config/locales
      create  db
        ~省略~
      create  public/javascripts/dragdrop.js
      create  public/javascripts/controls.js
      create  public/javascripts/application.js
      create  doc/README_FOR_APP
      create  log/server.log
      create  log/production.log
      create  log/development.log
      create  log/test.log

成功した。

そして起動確認。
普通に

ruby script/server

でいつものようにhttp://サーバー名:3000でおなじみのウェルカム画面が表示されるはず。

デーモン化。

ruby script/server -d

停止させたい場合は通常のサーバと同じように

ps aux

でPIDを調査し


kill -KILL PID

で停止させる。-KILLオプションをつけないと停止しないので注意。

他サイトでは上記手段ではなくさくらインターネットでしかしないような/htaccessの変更や
シンボリックリンクを張るという手順を見かけるが、ありゃ一体なんなんだろう…。

とりあえず今回の最低限の環境構築は終了。

次回は実際のアプリケーションをデプロイします。

参考サイト
http://tomonori855.sakura.ne.jp/recipe/2006/05/ruby_on_rails.html
http://www.fishowl.com/web/cat21129514/index.html
http://blog.proj.jp/ituki/20090107.html
http://t100life.blog121.fc2.com/blog-entry-148.html