deviseを使っていてメールアドレスやパスワードを入力するページは force_ssl をかけていたんだけど、ログイン後のリダイレクトでhttps://hogehoge に飛ばされちゃうと一部の画像とかがssl対応できなかったのでブラウザの判定はイマイチになっちゃう。
そんな時は Devise::SessionsController#create をオーバーライドする
deviseでログイン後のリダイレクトはsslを使いたくない場合
[Kod][Mac OS X]プログラマー向けエディタKodにhamlとsassのlangファイルが無かった
無かったんです。
なのでrubyとcssで代用しました。(基本的には同じだよね!?)
kod.appコンテキストメニューから「パッケージの内容を表示」で以下のようにフォルダを辿っていくと、「lang」フォルダがあります。
で、haml用にruby.langをコピってhaml.langにリネーム。
でもこれだけだとSyntax modeにRubyが2つになってしまうので、
@titleをHAMLに変更して @matchextをhamlにしておきました。
まぁ色付けは控えめなんだけど……真っ白よりはましかな
scssも同じ要領で使えちゃいますよ!
てゆうかlangファイルの中身ってrubyで書いてあるのね
Mac ローカル環境でWebアプリケーション開発をバーチャルホスト管理にした
http://kozo002.blogspot.com/2011/01/cakephp13.html
最近MacBook Airを買ってちょっと環境が変わりましたので書きます。
XAMPPを卒業
Macなんだし。せっかくのUNIX環境と親切にもデフォルトでインストールされているApacheを使うことにしました。
そもそも以前も組み込みのApache使って開発していたのですが、httpd.confをいじってたらよくわからない事態になってしまって……えいや!っとXAMPPに逃げたわけです。はい。
前回の失敗を活かして慎重に進めることにより /Library/WebServer ディレクトリにまとめられました。
バーチャルホストごとに管理
前まではlocalhostのルート直下に site01 とかディレクトリを作って各サイトのトップページにしてたんですが、これ美しくないですよね。というわけで命名規則を local で始まり、サイトの名称をつなげたバーチャルホスト毎に管理するようにしました。例えばブログを開発するなんてときは localblog とかにしてます。
ディレクトリは /Library/WebServer/localblog に app/ と public_html/ を設置。CakePHPの本体は /Library/WebServer/share/cake に置くようにしました。見通しが良くなって気持ちいいです。
バーチャルホストの設定は
- /etc/hosts に 127.0.0.1 localblog を追加
- 再起動
- /etc/apache2/httpd.conf のかなり下の方にある
# Virtual hosts #Include /private/etc/apache2/extra/httpd-vhosts.conf
↑をこのように↓修正
# Virtual hosts Include /private/etc/apache2/extra/my-httpd-vhosts.conf
my-httpd-vhosts.confには
<VirtualHost *:80> ServerAdmin sample@gmail.com DocumentRoot "/Library/WebServer/Documents" ServerName localhost # ServerAlias www.dummy-host.example.com ErrorLog "/private/var/log/apache2/localhost.error_log" CustomLog "/private/var/log/apache2/localhost.access_log" common </VirtualHost> <VirtualHost *:80> ServerAdmin sample@gmail.com DocumentRoot "/Library/WebServer/localblog/public_html" ServerName localblog ErrorLog "/private/var/log/apache2/localblog.error_log" CustomLog "/private/var/log/apache2/localblog.access_log" common <Directory "/Library/WebServer/localblog/public_html"> Order deny,allow Allow from all </Directory> </VirtualHost>と記述しました。
eclipseのプロジェクトもバーチャルホストで管理
これが一番きもちいい結果になりました。今までプロジェクトは cake と app01 と site01 てな感じで一つのサイトを開発してましたが、これが cake と localblog になったので快適です。しかも cake を直接見ることって殆ど無い(ソース上でF3押して出現場所にジャンプするのが便利)ですよね。
以上僕のローカル開発環境でした。
CakePHP 特定のModelだけconfigと違うPrefixを使う
テーブル名はCakePHPのPrefixが「cake_」でWordPress「wp_」だとします。
そもそも下記のようにやれば、Model自体は自身の名称とちがうテーブルは全然使えるんだけど
class Sample extends AppModel {
public $useTable = 'example';
}
これだとPrefixが「cake_」前提なんですよね。無理矢理「wp_posts」とか指定すると「cake_wp_posts」で認識されてMissing Tableになっちゃう。
でも何とかできるでしょ〜、と思ってModelのソースをPrefixで検索したらすぐ出てきたww
↓これです。(cake/libs/model/model.phpの2827行目くらい)
function setDataSource($dataSource = null) {
$oldConfig = $this->useDbConfig;
if ($dataSource != null) {
$this->useDbConfig = $dataSource;
}
$db =& ConnectionManager::getDataSource($this->useDbConfig);
if (!empty($oldConfig) && isset($db->config['prefix'])) {
$oldDb =& ConnectionManager::getDataSource($oldConfig);
if (!isset($this->tablePrefix) || (!isset($oldDb->config['prefix']) || $this->tablePrefix == $oldDb->config['prefix'])) {
$this->tablePrefix = $db->config['prefix'];
}
} elseif (isset($db->config['prefix'])) {
$this->tablePrefix = $db->config['prefix'];
}
if (empty($db) || !is_object($db)) {
return $this->cakeError('missingConnection', array(array('code' => 500, 'className' => $this->alias)));
}
}
$this->tablePrefix = $db->config['prefix']とかやってますね。このあたりを書き換えちゃえばいいわけで、自分のModel側で以下のようにしてみました。
class News extends AppModel {
var $useTable = 'wp_posts';
public function setDataSource(){
parent::setDataSource();
$this->tablePrefix = '';
}
}
これでバッチリWordPress側のデータを取り扱えるはずです。





