Hatena::Grouprubyist

うんたらかんたらRuby RSSフィード

2009-12-31Phusion Passenger users guideメモ2

Phusion Passenger users guideメモ2

| Phusion Passenger users guideメモ2 - うんたらかんたらRuby を含むブックマーク はてなブックマーク - Phusion Passenger users guideメモ2 - うんたらかんたらRuby

Phusion Passenger users guideメモ - うんたらかんたらRuby - Rubyistの続き


ログレベル

5.2. PassengerLogLevel <integer>

0: Show only errors and warnings.(デフォルト)

1: Show the most important debugging information. This might be useful for system administrators who are trying to figure out the cause of a problem.

2: Show more debugging information. This is typically only useful for developers.

3: Show even more debugging information.


実行ユーザ

5.6. PassengerUserSwitching <on|off>

Whether to enable user switching support.

This option may only occur once, in the global server configuration. The default value is on.

5.7. PassengerDefaultUser <username>

Passenger enables user switching support by default. This configuration option allows one to specify which user Rails/Rack applications must run as, if user switching fails or is disabled.

This option may only occur once, in the global server configuration. The default value is nobody.

8.1. User switching (security)

A Rails application is started as the owner of the file config/environment.rb.

This behavior is the default, and you don’t need to configure anything. But there are things that you should keep in mind:

・The owner of environment.rb must have read access to the Rails application’s folder, and read/write access to the Rails application’s logs folder.

(略)


6.3.6. The Rails application reports that it’s unable to start because of a permission error

Please check whether your Rails application’s folder has the correct permissions. By default, Rails applications are started as the owner of the file config/environment.rb, except if the file is owned by root. If the file is owned by root, then the Rails application will be started as nobody (or as the user specify by RailsDefaultUser, if that’s specified).



要は

PassengerUserSwitching がdefaultでONになっているので

config/environment.rbのownerでRailアプリが実行される。

ユーザを指定して実行したいのであれば、config/environment.rbのownerを変更するか

PassengerUserSwitching をOFFにした上でRailsDefaultUserを定義する。


ちょっとやってみた

default(environment.rbのowner rochefort)

$ ps aux | grep Rails
rochefort  41944   0.0  1.0   646644  41560   ??  S     4:31PM   0:01.32 Rails: /webapp/rails/redmine 

default(environment.rbのowner hoge

$ ps aux | grep Rails
hoge   51242   0.0  0.6   645120  26112   ??  S     5:07PM   0:00.17 Rails: /webapp/rails/redmine

PassengerUserSwitching OFF

$ ps aux | grep Rails
nobody   49242   0.0  0.6   645120  26344   ??  S     5:00PM   0:00.16 Rails: /webapp/rails/redmine 

defaultのnobodyで上がる。


PassengerUserSwitching OFF かつ RailsDefaultUser hoge

$ ps aux | grep Rails
hoge   50130   0.0  0.6   645120  26140   ??  S     5:03PM   0:00.16 Rails: /webapp/rails/redmine 

ちゃんと見てなかったけど、Passenger ApplicationSpawnerも同一ユーザで実行している模様。


サブURIの静的コンテンツ

8.9. How to fix broken images/CSS/JavaScript URIs in sub-URI deployments

おおお、static URI じゃなく relative URI って書いてるやん。。。

最初にちゃんと読むべきだったな。

passengerのcss - うんたらかんたらRuby - Rubyist



後でやる

チューニング

5.12.1. PassengerMaxPoolSize <integer>

5.12.3. PassengerPoolIdleTime <integer>

5.12.4. PassengerMaxRequests <integer>


Capistrano.

8.3. Capistrano recipe

トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20091231

2009-12-28passengerでアプリ毎にRAILS_ENVを変更

passengerでアプリ毎にRAILS_ENVを変更

| passengerでアプリ毎にRAILS_ENVを変更 - うんたらかんたらRuby を含むブックマーク はてなブックマーク - passengerでアプリ毎にRAILS_ENVを変更 - うんたらかんたらRuby

KOSHIGOE学習帳 - [Ruby Passenger]

RAILS_ENVに指定したい値を設定できる。デフォルトでproduction。
グローバル設定で行う。
アプリケーションごとに変更したい場合は、config/environment.rbの中で設定する事。

おお、アプリ単位で指定できるのか。

environment.rbに書いときゃいいだけか。

知らんかった。

開発系はdevelopmentで、ossはproductionでと分けられる。

トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20091228

2009-12-25passengerのcss

passengerのcss

| passengerのcss - うんたらかんたらRuby を含むブックマーク はてなブックマーク - passengerのcss - うんたらかんたらRuby

passenger使ってて

image_tagで指定した画像は表示できるがcssで指定した画像が表示できない。

ってことがあって、ちょっとパニック。

script/serverでの起動だと問題なく表示できる)


とりあえずimage_tagってどうなってるんだと思って


ソースをチラ見

cd /opt/local/lib/ruby/gems/1.8/gems/

view actionpack-2.3.5/lib/action_view/helpers/asset_tag_helper.rb

def image_tag(source, options = {})
  options.symbolize_keys!

  options[:src] = path_to_image(source)
  options[:alt] ||= File.basename(options[:src], '.*').split('.').first.to_s.capitalize

  if size = options.delete(:size)
    options[:width], options[:height] = size.split("x") if size =~ %r{^\d+x\d+$}
  end

  if mouseover = options.delete(:mouseover)
    options[:onmouseover] = "this.src='#{image_path(mouseover)}'"
    options[:onmouseout]  = "this.src='#{image_path(options[:src])}'"
  end

  tag("img", options)
end

path_to_image

def image_path(source)
  compute_public_path(source, 'images')
end
alias_method :path_to_image, :image_path # aliased to avoid conflicts with an image_path named route

compute_public_path

あったよこれか。"#{ActionController::Base.relative_url_root}#{source}"

ふむふむ。だから、environment.rbとかに↓みたいに書いてたりしたのか。(今は不要)

config.action_controller.relative_url_root = "/myapp"

def compute_public_path(source, dir, ext = nil, include_host = true)
  has_request = @controller.respond_to?(:request)

  source_ext = File.extname(source)[1..-1]
  if ext && (source_ext.blank? || (ext != source_ext && File.exist?(File.join(ASSETS_DIR, dir, "#{source}.#{ext}"))))
    source += ".#{ext}"
  end

  unless source =~ %r{^[-a-z]+://}
    source = "/#{dir}/#{source}" unless source[0] == ?/

    source = rewrite_asset_path(source)

    if has_request && include_host
      unless source =~ %r{^#{ActionController::Base.relative_url_root}/}
        source = "#{ActionController::Base.relative_url_root}#{source}"
      end
    end
  end

  if include_host && source !~ %r{^[-a-z]+://}
    host = compute_asset_host(source)

    if has_request && !host.blank? && host !~ %r{^[-a-z]+://}
      host = "#{@controller.request.protocol}#{host}"
    end

    "#{host}#{source}"
  else
    source
  end
end

ちなみにurlの後ろのidはココでごにょごにょ

ファイルのmtime(更新日時)を取得してto_iしてる。

この手法はいいですね。

cssで定義した画像もこういう風にできないかな。

def rewrite_asset_path(source)
  asset_id = rails_asset_id(source)
  if asset_id.blank?
    source
  else
    source + "?#{asset_id}"
  end


def rails_asset_id(source)
  if asset_id = ENV["RAILS_ASSET_ID"]
    asset_id
  else
    if @@cache_asset_timestamps && (asset_id = @@asset_timestamps_cache[source])
      asset_id
    else
      path = File.join(ASSETS_DIR, source)
      asset_id = File.exist?(path) ? File.mtime(path).to_i.to_s : ''

      if @@cache_asset_timestamps
        @@asset_timestamps_cache_guard.synchronize do
          @@asset_timestamps_cache[source] = asset_id
        end
      end

      asset_id
    end
  end
end

本題

rails/passengerの動きは特にまずいことなさそうなので、

cssでの画像パス指定をどうするかってとこに行き着いた。


で、ココ。

CSS background image help (Page 1) - XHTML/CSS/JavaScript - Rails Forum - Ruby on Rails Help and Discussion Forum

ありがとうFreddy。

cssからの相対パス指定にすればokでした。

よくよく考えると全然大した話じゃないけど、

railsやpassengerが何かやってんじゃないかと勘繰って嵌ってしまった。

あースッキリ。


変更前

background-image:url(/images/hoge.gif)

変更後

background-image:url(../images/hoge.gif)

結局

cssでの画像指定は、相対パスで。


追加

users guideに書いてた。

Phusion Passenger users guideメモ2 - うんたらかんたらRuby - Rubyist

2009-02-13RailsBaseURI 対応して欲しいです

RailsBaseURI 対応して欲しいです

| 00:56 | RailsBaseURI 対応して欲しいです - うんたらかんたらRuby を含むブックマーク はてなブックマーク - RailsBaseURI 対応して欲しいです - うんたらかんたらRuby

2009-02-12 - hiro-uedaの日記 - Rubyist

google codeにこんな機能があるとはしりませんでした。

早速★追加してみました。

Issues - phusion-passenger - Google Code

トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20090213

2009-01-10passengerのRailsBaseURIがうまくいかない

passengerのRailsBaseURIがうまくいかない

| passengerのRailsBaseURIがうまくいかない - うんたらかんたらRuby を含むブックマーク はてなブックマーク - passengerのRailsBaseURIがうまくいかない - うんたらかんたらRuby


やりたいこと

RailsBaseURIを複数設定して、複数プロジェクトを起動させたい。


できない。。。

静的コンテンツのみ読込めない。

RailsBaseURIを使用しない場合はOK。


apacheのログを見てみるとjscssが404エラー。

RailsBaseURIで指定した、/hogehoge が効いていない。

::1 - - [10/Jan/2009:16:40:30 +0900] "GET /javascripts/jquery/jquery.js?1191311468 HTTP/1.1" 200 80469

httpd.conf

httpd-rails.conf

<VirtualHost *:80>
  ServerName localhost
  DocumentRoot /opt/local/apache2/htdocs/rails
  RailsBaseURI /hogehoge
  RailsBaseURI /fugafuga
</VirtualHost>

関連記事 RailsBaseURI が効かない - hiro-uedaの日記 - Rubyist

がありますが、これではなさそう。


httpd.confいじったり(mod_rewrite/mod_aliasの無効化、Directoryディレクトティブ追加など)

enviroment.rbにRAILS_RELATIVE_URL_ROOTを追加してみたりしたが

解決せず。ん〜。


環境

hirozhiroz2009/02/23 16:14同じ問題で悩みました・・・
たしかにenvironment.rb に
 ENV['RAILS_RELATIVE_URL_ROOT']="/app"
と書いてもダメでした。(RoutingError)
しかしRails::Initializer.run do |config| 〜 endの中に
 config.action_controller.relative_url_root = "/app"
と書いたら動きました!
参考: http://groups.google.com/group/phusion-passenger/browse_thread/thread/bc1c7e99701ab5db

トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20090110