アフィリエイト広告を利用しています

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog
asahina-ryusei.net

FreeBSD gnome-config: not found, No package 'x11-xcb' found

FreeBSD Ports でとあるパッケージをいれようとしていたところ以下の不具合で進まない。
gnome-config: not found
No package 'x11-xcb' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.


どうも PKG_CONFIG_PATH というパスが通ってなかったり一部のファイルが見つからないということで調べると libxcb に原因がある様に見える。

libxcb のバージョンを調べてみると...
% sudo portversion -v | grep -i libxcb
libxcb-1.3 < needs updating (port has 1.7)


これかなと思って更新したらうまくいきました。
% sudo portupgrade libxcb-1.3

Rails3 プロジェクト名とテーブル名を同じにできない。

Rails3 でプロジェクト名と同じ文字列で scaffold しようとしたら怒られたのでメモ。

まず、"rails_project" という名前で project を作成。
% rails new rails_project


次に、"rails_project" という名前で scaffold してみると.....
% rails g scaffold rails_project prj_name:string
The name 'RailsProject' is either already used in your application or reserved by Ruby on Rails. Please choose an alternative and run this generator again.


と言われて作成できない。
"rails_project2" という名前で scaffold するとできる。(当然ですが)
% % rails g scaffold rails_project2 prj_name:string

Rails3系で will_paginate を使う

Rails3系で will_paginate を使ってみたのでメモ。

Gemfile に以下を追加する。
% gem 'will_paginate'


追加したら install する。
% bundle install


インストールされたことを確認。
% bundle show | grep will
* will_paginate (2.3.15)


config/application.rb に以下を追加。
require 'will_paginate'


require しないと以下のエラーが出る。
undefined method `paginate'


これで準備ができたので controller に実装してみる。
@customers = Customer.paginate(:page => params[:page], :per_page => 3)


サーバを再起動してブラウザでアクセスしたら以下のエラーが出た。
can't convert nil into Array


will_paginate の不具合で version 3.0 なら fix しているらしい。

Gemfile の will_paginate にバージョン上方を追加する。
gem 'will_paginate','3.0.pre'


追加したら再度 install する。
% bundle install


3.0 が入ったことを確認する。
% bundle show | grep will
* will_paginate (3.0.pre)


ここからは、Rails2系と同じ。
controller で以下の様にして使う。
@customers = Customer.paginate(:page => params[:page], :order => 'created_at desc', :per_page => 3)


view に追加 以下を見せたい場所に追加するだけ。
<%= will_paginate @customers %>

Rails3 eRuby html_escape

Rails3系で database 中に入力されている html コードを表示しようした際に html 特殊文字として表示されてしまう。具体的には、タグを表示する時に括弧が &lt;, &gt; に置き換えられてしまうということ。Rails2系では、<%=h val %> の様に h を使うことで html エスケープが可能であったが Rails3系では、デフォルトでこれが効いてしまっている様子。

では、html エスケープを無効にする為にはどうしたらいいのかと調べてみたら raw を使うということがわかった。
<%= raw val %>


by Rails3 release note
7.4.3 Other Changes

* You no longer need to call h(string) to escape HTML output, it is on by default in all view templates. If you want the unescaped string, call raw(string).


by Rails3 Documentation
Public Instance methods
raw(stringish)

This method outputs without escaping a string. Since escaping tags is now default, this can be used when you don’t want Rails to automatically escape tags. This is not recommended if the data is coming from the user’s input.

For example:

<%=raw @user.name %>


この程度のことですがかなり時間を費やしてしまいました。
おかげでいろいろ勉強にもなったのでまぁいいか。。

Rails3 RAILS_ROOT が無くなるみたい。

RAILS_ROOT を使っている方は、Rails.root に置き換えた方が良さそうです。
DEPRECATION WARNING: RAILS_ROOT is deprecated. Please use ::Rails.root.to_s. (called from at /users/rails/project/config/application.rb:5)

Rails3 controller に自作 helper method を使う。

Rails3系で controller に自作した helper method を使ってみたのでメモ。

app/helpers 配下に xxxxx_helper.rb という形式で original_helper.rb を作成。
中身は、以下の通り。
module
  def h_method
    return 'helper test'
  end
end


これを controller で使える様にする為、app/controllers/application_controller.rb に以下を追加。
include OriginalHelper


controller の中で以下の様に使うことが可能。
def index
  @result = h_method
end

Rails 3.0.1

Rails 3.0.0 から Rails 3.0.1 にした時の出力をメモ。
% sudo gem update rails
Updating installed gems
Updating rails
Successfully installed activesupport-3.0.1
Successfully installed activemodel-3.0.1
Successfully installed actionpack-3.0.1
Successfully installed activerecord-3.0.1
Successfully installed activeresource-3.0.1
Successfully installed actionmailer-3.0.1
Successfully installed railties-3.0.1
Successfully installed rails-3.0.1
Gems updated: activesupport, activemodel, actionpack, activerecord, activeresource, actionmailer, railties, rails
Installing ri documentation for activesupport-3.0.1...
Installing ri documentation for activemodel-3.0.1...
Installing ri documentation for actionpack-3.0.1...
Installing ri documentation for activerecord-3.0.1...
Installing ri documentation for activeresource-3.0.1...
Installing ri documentation for actionmailer-3.0.1...
Installing ri documentation for railties-3.0.1...
Installing ri documentation for rails-3.0.1...


確認してみる。
% gem search rails

*** LOCAL GEMS ***

rails (3.0.1, 3.0.0, 2.3.8, 2.3.5)

Rails3 + Ruby1.9 で fork の不具合。

FreeBSD に rails3 の環境を Ruby1.9系で構築した際の不具合をメモ。

以下の環境で本番環境へアクセスすると fork() の不具合で passenger が error する。
FreeBSD7.2 + Rails3.0 + Ruby1.9.2 + Apache2.2.11

About your application’s environment をクリックすると Internal Server Error となる。
httpd-error.log を確認すると以下のログが出ている。
/usr/local/lib/ruby/gems/1.9/gems/passenger-2.2.15/lib/phusion_passenger/utils.rb:245:in `fork': fork() function is unimplemented on this machine (NotImplementedError)


どうも fork が原因らしいのだがどうしていいかわからず、ひとまず rails3 のままで、ruby1.9系 を ruby1.8系に下げた。rake も 1.8系で使っていたものに合わせた。

rake してみる。
% rake
(in /usr/local/www/apache22/rails/aaa)
rake aborted!
uninitialized constant Bundler
/usr/local/www/apache22/rails/aaa/Rakefile:4
(See full trace by running task with --trace)


abort する。
bundler を確認。
% gem list | grep -i bundler

bundler が無い。
bundler を入れる。
% gem install bundler
ERROR: Error installing bundler:
bundler requires RubyGems version >= 1.3.6

gem が古い。。
gem を更新する。
% gem update --system
% gem -v
1.3.7

bundler を再度入れてみる。
% gem install bundler
Successfully installed bundler-1.0.3
1 gem installed
Installing ri documentation for bundler-1.0.3...
Installing RDoc documentation for bundler-1.0.3...

入った。
% gem list | grep -i bundler
bundler (1.0.3)

再度 rake してみる。
% rake
(in /usr/local/www/apache22/rails/aaa)
Could not find abstract-1.0.0 in any of the sources
Try running `bundle install`.

bundle install する。
% bundle install

再度 rake する。
% rake
(in /usr/local/www/apache22/rails/aaa)
Loaded suite /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader
Started
.
Finished in 0.026635 seconds.

1 tests, 1 assertions, 0 failures, 0 errors
Loaded suite /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader
Started
.......
Finished in 0.22689 seconds.

7 tests, 10 assertions, 0 failures, 0 errors


rake OK!!

この後、本番環境をブラウザで確認して Internal Server Error が無くなりました。
FreeBSD + rails3 は、使えるようになりましたが ruby1.9系での fork の不具合は、不明のままです。

passenger install for FreeBSD

FreeBSD で Ruby1.8 + passenger を使っていた環境で
Ruby1.9系にし、passenger も新たに入れ直そうとしたところ少しつまずいた。

gem から install する。
% sudo gem install passenger -V


passenger のインストーラーが install されると以下ができる。
passenger-install-apache2-module


これを実行すると install が完了する。
% sudo passenger-install-apache2-module


が、以下の様な、エラーが出て止まってしまう。
Compiling and installing Apache 2 module...
cd /usr/local/lib/ruby/gems/1.9/gems/passenger-2.2.15
/usr/local/bin/ruby19 -S /usr/local/bin/rake clean apache2
# /usr/local/bin/ruby19 -S /usr/local/bin/rake clean apache2
/usr/local/lib/ruby/1.9/rubygems.rb:340:in `bin_path': can't find executable rake for rake-0.8.7 (Gem::Exception)
from /usr/local/bin/rake:19:in `
'


rake を単独で実行するとちゃんと動いていない、 rake が怪しい。
あーこれも verison か。
ということで rake を探し rake19 が既にあることがわかったので
シンボリックリンクして置き換える。
% mv /usr/local/bin/rake /usr/local/bin/rake18
% ln -s /usr/local/bin/rake19 /usr/local/bin/rake


再度、passenger-install-apache2-module を実行。
% sudo passenger-install-apache2-module


今度は、うまく行きました。

rails3 403 error

passenger をインストールした際のお手本を元に httpd-vhosts.conf の設定をしたら 403 error となった。
Forbidden

You don't have permission to access /students on this server.


以下のお手本の通りの設定を
  <VirtualHost *:80>
      ServerName www.yourhost.com
      DocumentRoot /somewhere/public
      <Directory /somewhere/public>
          AllowOverride all
          Options -MultiViews
      </Directory>
   </VirtualHost


以下の様にしたらうまくいきました。
  <VirtualHost *:80>
      ServerName www.yourhost.com
      DocumentRoot /somewhere/public
      <Directory /somewhere/public>
          Options FollowSymLinks 
          AllowOverride None
          Order allow,deny
          Allow from all
      </Directory>
   </VirtualHost
<< 前へ     >>次へ
×

この広告は30日以上新しい記事の更新がないブログに表示されております。