03/06: CakePHP開発環境セットアップ
CakePHPを少し使ってみようと思い、環境を作ってみたのでそのメモ。
構築環境は下記の通り。
- Mac OS X Snow Lepard (10.6.6)
- macports
- lighttpd (1.4.28)
- php5 (5.3.5)
- mysql (5.1.55)
macportsは既に入っていて、mysqlもセットアップされている状態から作業を開始した。
php5 インストール
macportsでインストール。fastcgiで動かしたかったので、variantsを指定した。
$ sudo port install php5 fastcgi
mysqlに繋ぐためのモジュールを追加インストール。(少し前のバージョンではvariantsで指定していたらしいのだが、今のバージョンは別パッケージになっている)
$ sudo port install php5-mysql
php.ini 設定
まずは標準で用意されているテンプレートをコピー。
$ sudo cp /opt/local/etc/php5/php.ini-development /opt/local/etc/php5/php.ini
mysqlに繋ぐための設定。
pdo_mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock
mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock
mysqli.default_socket = /opt/local/var/run/mysql5/mysqld.sock
PATH_INFOとPATH_TRANSLATEDがきちんと動くようになるという設定。(何で標準でonになっていないのか理解に苦しむ)
cgi.fix_pathinfo=1
lighttpd インストール
これもmacportsでインストール。
$ sudo port install lighttpd
/opt/local/etc/lighttpd/lighttpd.conf 設定
ドキュメントルートを自分の環境に合わせて設定
実行ユーザの変更をしないようにコメントアウト。
#server.username = "_www"
#server.groupname = "_www"
CakePHP用のmod_rewrite設定(きれいじゃないけど、とりあえずの用途にはこれで何とかなるのではないかと思う)
url.rewrite-if-not-file = (
"^/$" => "/app/webroot/",
"^(.*\.(html|png|jpg|gif|css|js|ico))$" => "/app/webroot/$1",
"^/(.*)$" => "/index.php?url=$1"
)
/opt/local/etc/lighttpd/modules.conf 設定
mod_rewrite有効化。
server.modules = (
"mod_access",
# "mod_alias",
# "mod_auth",
# "mod_evasive",
# "mod_redirect",
"mod_rewrite",
# "mod_setenv",
# "mod_usertrack",
)
fastcgi有効化。
include "conf.d/fastcgi.conf"
/opt/local/etc/lighttpd/conf.d/fastcgi.conf 設定
fastcgi.server = ( ".php" =>
( "php-local" =>
(
"socket" => socket_dir "/php-fastcgi-1.socket",
"bin-path" => "/opt/local/bin/php-cgi",
"max-procs" => 1,
"broken-scriptfilename" => "enable",
)
),
( "php-tcp" =>
(
"host" => "127.0.0.1",
"port" => 9999,
"check-local" => "disable",
"broken-scriptfilename" => "enable",
)
),
( "php-num-procs" =>
(
"socket" => socket_dir "/php-fastcgi-2.socket",
"bin-path" => "/opt/local/bin/php-cgi",
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "16",
"PHP_FCGI_MAX_REQUESTS" => "10000",
),
"max-procs" => 5,
"broken-scriptfilename" => "enable",
)
),
)
app/config/core.php 設定
date_default_timezone_set('Asia/Tokyo');
Configure::write('Security.salt', 'てきとうに入力');
Configure::write('Security.cipherSeed', 'てきとうに入力');
DB作成
mysqlにアプリケーション用のデータベースとユーザを作成。
app/config/database.php 設定
作成したDBの接続情報を設定。
Cygwinのgetclip, pubclipに当たるものがMacOSXにもあることを初めて知った。
pbcopy が pubclip に当たるもの。
pbpaste が getclip に当たるもの。
pb って pasteboard の略で、Macのクリップボード機能のことみたい。
11/24: S2JDBCで複合キーを扱う
S2JDBCは(というかJPAが、と言うべきか)複合キーをきれいに扱える。
複合主キーは@Idアノテーションを複数のカラムに付ければ良い。
複合キーでの結合のアノテーションはこんな感じ。
@ManyToOne
@JoinColumns({
@JoinColumn(name = "xx_id", referencedColumnName = "xx_id"),
@JoinColumn(name = "yy_id", referencedColumnName = "yy_id")
})
public Parent parent;
09/14: Mooseで遅延初期化された値をもう一度初期化する
例えばこんな値があったとする。
has 'bar' => (
isa => 'ArrayRef',
is => 'rw',
lazy => 1,
builder => '_build_bar',
);
後になってもう一度 _build_bar で値を初期化したい場合、
$self->bar($self->_build_bar);
とやれば目的は果たせるのだが、
$self->meta->get_attribute('bar')->clear_value($self);
とやった方がきれいだと思う。
近々ImageMagickをちょっと触りそうなので、手元の環境にインストール。
MacPortsならば以下のコマンドでPerlモジュールまで入ることが判明。
port install ImageMagick +perl
+perlがミソ。最初はこれなしで本体だけインストールして、cpanでinstall Image::Magickとかやったんだけど、ライブラリが参照できずにビルドがこけた。
06/12: vsftpdの設定を失敗した
FTPでPASV接続した際に調子が悪くて、設定を調べていたら、/etc/vsftpd/vsftpd.confにひどい設定をしていた事実を発見した。
pasv_min_port=330000
エラーで落ちてくれよ。
06/08: JavaScriptでドメイン間のデータやりとり
セキュリティ制限により、ドメインが異なるページ間ではJavaScriptでデータのやりとりをすることはできないっぽい。
なんとか回避策はないものかと、ちょっと試行錯誤してみた。
で、見つけた解決策は、URLパラメータでごにょごにょするというもの。
最初のwindowでは、callback関数を定義しておく
window.callback = function(msg){
alert(msg);
};
で、他のドメインのページを開く
window.open(他のドメインのURL);
開いた先では、直接コールバックをせずに、パラメータ付きで元のドメインのあるページを開く
location.href = あるページのURL + '?' + escape(渡す値)
で、その遷移先のページでコールバック関数を呼んでやる
opener.callback(unescape(location.search.slice(1)));
window.close();
めんどくさい
04/30: JRuby on Rails in Tomcat
RailsアプリをwarパッケージにしてTomcat上に配備するメモ。
検証環境
- JDK 1.6.0 update13
- JRuby 1.2.0
- Rails 2.3.2
- warbler 0.9.12
- jruby-rack 0.9.4
- activerecord-jdbc-adapter 0.9.1
環境構築
- JDKインストール
- JRubyインストール(解凍してパス通す)
- gemアップデート
$ jruby -S gem install rubygems-update $ jruby -S update_rubygems
- gemから必要なものを入れる
$ gem install rails $ gem install activerecord-jdbc-adapter $ gem install mongrel $ gem install warbler
- JDBCドライバをゲット
※ 今回はSQL Server JDBC Driverを使用。
ちなみに、database.ymlは以下の様な感じ。
adapter: jdbc
driver: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://localhost;database=hoge;
username: foo
password: bar
urlにユーザ名/パスワードを書いても無視されるっぽい。
war生成
- まずは普通にRailsアプリ作成
- environment.rb修正
※ 最近のはやらなくても大丈夫
の後に# Bootstrap the Rails environment, frameworks, and default configuration require File.join(File.dirname(__FILE__), 'boot')if defined?(JRUBY_VERSION) # hack to fix jruby-rack's incompatibility with rails edge module ActionController module Session class JavaServletStore def initialize(app, options={}); end def call(env); end end end end end - warbler実行
$ jruby -S warble config $ jruby -S warble war
- warファイルは無視して、tmp/war以下のファイルを使う
- WEB-INF/libの下のjrubyを差し替え
http://dist.codehaus.org/jruby/1.2.0/jruby-complete-1.2.0.jar - WEB-INF/libの下のrackを差し替え
http://repository.codehaus.org/org/jruby/rack/jruby-rack/0.9.4/jruby-rack-0.9.4.jar - (必要ならwarに圧縮して)Tomcatに配備
04/30: SQL Server on Rails
Windows + SQL Server + Ruby on Rails + Active Recordという環境を実現するために試行錯誤してみた。
注:以下の実験はWindowsのCRuby(mswin32版)で動作させるための実験的なもの。Windows上だとJRubyの方が安定してるっぽいし、activerecord-jdbc-adapterでSQL Serverにそれなりに接続できるので、そっちに倒した方が良い。
検証環境
- Windows XP Professional
- SQL Server 2005 Express Edition
- Ruby 1.8.7-p72 (mswin32)
- Rails 2.3.2
- dbi 0.4.1
- dbd-odbc 0.2.4
- activerecord-sqlserver-adapter 1.0.0.9250
環境構築
Railsまでは入っているという前提
- 以下のコマンドでgemのライブラリをインストール
$ gem install dbi $ gem install dbd-odbc $ gem install activerecord-sqlserver-adapter --source=http://gems.rubyonrails.org
- ruby-odbcのWindows用バイナリをダウンロードし、odbc.soとodbc_utf8.soを「C:\ruby\lib\ruby\1.8\i386-mswin32」にコピー
-
DBD:ODBCライブラリ修正
C:\ruby\lib\ruby\gems\1.8\gems\dbd-odbc-0.2.4\lib\dbd を修正する
修正前: require "odbc"
修正後: require "odbc_utf8"
※ これにより、SQL ServerがSJIS(CP932)でも、RailsでUTF8になる
database.yml設定例
adapter: sqlserver
mode: ODBC
dsn: DRIVER={SQL Server};SERVER=.\SQLEXPRESS;UID=user;PWD=pass;DATABASE=dbname;
04/30: はじめてのRuby(Windows編)
仕事でRubyを使うことになった。 Rubyはやったことないってあれだけ言ってあったのに...
これはWindowsでRuby on Railsを入れたときのメモ。
One-Click Installer
ちょっと古いバージョンでよいならばOne-Click Installerで入れると簡単。
Ruby mswin32
mswin32版は新しいものがこまめにアップされてる。
以下のようなものを別途導入する必要がある。
インストール手順は以下の様な感じ
- ruby mswin32を解凍し、c:\rubyに配置
- c:\ruby\binをPATHに追加
- rubygemsを解凍し、コマンドラインから「ruby setup.rb」
- コマンドラインから「gem install rails」
- コマンドラインから「gem install mongrel」
- コマンドラインから「gem install sqlite3-ruby --version=1.2.3」 ※ 最新版はWindows未対応のため
試しに何かを作ってみる
- $ rails test
- $ cd test
- $ rake db:create:all
- $ ruby script\generate scaffold Message title:string body:text
- $ rake db:migrate
- $ ruby script\server
- このURLにアクセス:http://localhost:3000/messages









