Quantcast
Channel: ソフラボの技術ブログ
Viewing all articles
Browse latest Browse all 166

さくらレンタルサーバーではRuby on Railsは動作するけどレスポンスが糞遅いのでやめとけ

$
0
0

タイトルの通りの内容で、さくらレンタルサーバーRailsは糞遅いというお話です。

経緯

ホームページを作成する案件があって、それに付随するプログラムの開発がありました。
ホームページを動作させるのがメインだったので、レンタルサーバーが選択されました。

個人的にPHPが嫌い(Java育ちなのでPHPの曖昧さがなじめない)なのでそれ以外の言語はないのかとRubyを選択しました。

初めてのRuby on Railsでしたが、Java経験者からすると今までにない感じのプログラミングだったので、非常に楽しくワクワクしながら開発できました。

Ruby on Rails動作環境構築

さて、ひと通り出来上がったのでテストしてもらうために、動作環境であるレンタルサーバーRuby on Railsが動作する環境を構築しました。

事前に動作するというのは確認できていたので、いろんなサイトを参考にしながら試行錯誤で環境を構築しました。

この時点で、レスポンスが遅いというのは情報として知ってました。

でも、本当に遅いのかというのがわからなかったのと、FCGIだと速いという情報もあったので大丈夫だろうと思ってました。

デプロイ

環境の構築も完了したのでデプロイしていました。

トップページにアクセスしてみると、なかなか画面が表示されません。
何度やっても遅い、遅い、遅い。

確か画面表示に10秒以上かかってたと思います。

「これはあかん」ということで、PHPで最初から作りなおしました…。

構築手順

かなり日にちが経っててよく覚えてませんが、当時のメモをそのまま載せておきます。ものすごく適当です。

お遊びで構築したい人向けです。間違っても本番運用しないで下さい。泣くのは開発者であるあなたです。


1.wwwディレクトリと同階層にappディレクトリを作成する

2.appディレクトリにRailsプロジェクトを配置する

3.Rails/publicに.htaccessを作成する

RewriteEngine On
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]

ErrorDocument 500"Application errorRails application failed to start properly"

4.Rails/publicにdispatch.cgiを作成し、権限を755にする

#!/home/user/local/rbenv/versions/2.2.3/bin/ruby# 本番環境設定ENV["RAILS_ENV"] = "production"# rake secretで生成したものENV["SECRET_KEY_BASE"] = "7cd8a5e38cfeddd0d0a4b45ad4bf75fd2cffe124f43388c34e6f29cf2c2e78f7d9cc1b2003f913be65c54f6ec61c7032609d3c9d88d6b3dc5226925a825b8379"# 静的ファイルENV["RAILS_SERVE_STATIC_FILES"] = "true"requireFile.dirname(__FILE__) + '/../config/environment'classRack::PathInfoRewriterdefinitialize(app)
    @app = app
  enddefcall(env)
    env.delete('SCRIPT_NAME')
    parts = env['REQUEST_URI'].split('?')
    env['PATH_INFO'] = parts[0]
    env['QUERY_STRING'] = parts[1].to_s
    env['PATH_INFO'] = env['PATH_INFO'].gsub(/\A#{ENV['RAILS_RELATIVE_URL_ROOT']}(.*)\Z/, '\1')
    env['SCRIPT_NAME'] = ENV['RAILS_RELATIVE_URL_ROOT']
    @app.call(env)
  endend# アプリケーション名を設定するRack::Handler::CGI.run  Rack::PathInfoRewriter.new(Hoge::Application)

5.Rails/config/boot.rbに以下を追記する

ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)

require'bundler/setup'ifFile.exist?(ENV['BUNDLE_GEMFILE'])

$LOAD_PATH.push('/home/user/local/rbenv/versions/2.2.3/lib/ruby/2.2.0')
$LOAD_PATH.push('/home/user/local/rbenv/versions/2.2.3/lib/ruby/site_ruby/2.2.0')
$LOAD_PATH.push('/home/user/local/rbenv/versions/2.2.3/lib/ruby/gems/2.2.0')
$LOAD_PATH.push('/home/user/local/rbenv/versions/2.2.3/lib/ruby')
$LOAD_PATH.push('/home/user/local/rbenv/versions/2.2.3/lib')

ENV['PATH'] += ':/home/user/local/bin'ENV['GEM_HOME'] ||= '/home/user/local/rbenv/versions/2.2.3/lib/ruby/gems/2.2.0'# パスを設定するENV['RAILS_RELATIVE_URL_ROOT'] = '/hoge'

6.静的ファイルをプレコンパイルする

rake assets:precompile RAILS_ENV=production

7.node.jsを編集する
/local/src/node-v0.10.38/deps/v8/tools/gyp/v8.gyp

['OS=="freebsd"', {'include_dirs+':['/home/user/local/include'],
    'link_settings': {'libraries': ['-L/usr/local/lib -L${HOME}/local/lib -lexecinfo',
    ]},
    'sources': ['../../src/platform-freebsd.cc',
      '../../src/platform-posix.cc'],
  }],

FCGI対応

$ cd ~/local/src
$ wget http://www.fastcgi.com/dist/fcgi.tar.gz
$ tar xvzf fcgi.tar.gz
$ cd  fcgi-2.4.1-SNAP-0311112127
$ ./configure --prefix=$HOME/localCFLAGS="-g -O2 -Wall -fPIC"CXXFLAGS="-g -O2 -Wall -fPIC"
$ make
$ make install#### $ gem install fcgi -- --with-fcgi-include=$HOME/local/include --with-fcgi-lib=$HOME/local/lib
$ cd ~/appdir
$ bundle exec gem install fcgi -- --with-fcgi-include=$HOME/local/include --with-fcgi-lib=$HOME/local/lib
$ vi Gemfile
   追記 gem 'fcgi'
$ bundle update

まとめ

さくらレンタルサーバーでは、Ruby on Railsは動作するが、レスポンスが糞遅いのでやめましょう。

レンタルサーバーというと全てのサーバーをイメージされると思いますが、root権限のない制約のあるレンタルサーバーのことです。
さくらのVPS等root権限のあるサーバーでは、普通に動作しますので勘違いされないようにお願いします。


Viewing all articles
Browse latest Browse all 166

Trending Articles