Archive for category 技術

IEでファイルがダウンロードできない

管理画面にCSVダウンロード機能を追加しようとしてはまりました。

エラーメッセージはこんな感じです。

www.xxxxxx.com - ...download.php をダウンロードできません。
このインターネットのサイトを開くことができませんでした。
要求されたサイトが使用できないか、見つけることができません。後でやり直してください。

っで、いろいろ調べてみると
すでに no-cache ヘッダが出力されたページにIEでアクセスするとこういった現象が起こるようです。

Content-Disposition: attachemnt と Cache-Control: no-cache によるダウンロードの問題
http://support.microsoft.com/default.aspx?scid=kb;ja;436605

セッションを発行する前に次の関数を指定すれば回避できるようです。

session_cache_limiter('public'); ・・・追加しました。
session_start();

FireFoxは特に問題なさそうです。

alias:エイリアスの作成

エイリアス(alias)は、コマンド本来の名前とは別の名前を付けることができます。

$ alias la='ls -alh'

のように実行すると、「la」というエイリアスを設定することができます。
引数を指定せずに実行した場合は現在エイリアスに設定されている内容が表示されます。

$ alias

alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

毎回エイリアス設定するのが面倒な場合は「.bashrc」に設定することをオススメします。
例えば、CakePHPのコンソールシェルをcakeというエイリアスで設定する場合

$ vi .bashrc

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
  . /etc/bashrc
fi

# User specific aliases and functions
alias la='ls -alh --color=tty'
alias cake='[[CakePHP Install Path]]/cake/console/cake' (※追加※)

のように編集して

$ source .bashrc

で反映、これで次回ログイン時にも既にエイリアスが設定されています。

redMineでInternalError

Apache再起動で誤魔化していたのですが、さすがにそろそろ対応してくださいと言われ。

常に出てる訳ではなく、しばらく使っているとなぜか突然「InternalError」になって
一旦出てしまうと何をやっても駄目

internalerror.jpg

String#chars というのが問題を起こしている模様

Railsには手をいれないで解決する方法が既にありました。こちら

config/initializers/remove_string_chars.rb

を以下の内容で作成するとエラーが回避できました。

unless '1.9'.respond_to?(:force_encoding)
 String.class_eval do
   begin
     remove_method :chars
   rescue NameError
     # OK
   end
 end
end

任意のリビジョン間で更新したファイルだけを抽出したい

Capistrano とか rsync とかでガツンとアプリケーションを配布するのが一番楽なんだけど
クライアントにはよっては差分ファイルだけくださいとか言われたりする。
もしくはクライアント側でも Subversion で管理してたりする・・・

svn diff -r 972:986 | diffstat

のようなコマンドを実行し、まず更新したファイルのパスを拾いあげ
せこせこ差分ファイルを抜き出したりしてたんだが、いかんせんメンドクサイのである。

そんな訳で Google に聞いてみる。(検索しただけですけどね)
TortoiseSVN でできるようだ

  • 作業コピーのディレクトリを右クリック「TortoiseSVN」メニューで「ログを表示」を選択
  • 出力されたログから比較したいリビジョンを選択(Ctrlキーでリビジョンを2つ選択)
  • 右クリックして「リビジョンを比較」を選択
  • 比較結果からエクスポートしたいファイルを選択
  • 右クリックして「選択をエクスポート」を選択
  • エクスポート先を指定

これでなんと更新したファイルだけ抜き出せちゃうんですね~
いや~、こりゃ便利だ。

追記~
そして TortoiseSVN じゃなくてコマンドでも抽出できるのがわかった
※任意のリビジョン間じゃないけど・・・

# cd [作業コピー]
# svn st | sed -e "s/^.*  //g" | cpio -pdv ./work

後、ちょっとだ。。

サブドメインを動的に設定する(mod_vhost_alias編)

Apache付属のモジュールmod_vhost_aliasを使うと、サブドメインとかフォースレベルドメインが動的に設定できます。

VirtualDocumentRoot /home/%2/svn_work/%1/httpd
VirtualScriptAlias  /home/%2/svn_work/%1/cgi-bin 

と設定することで

http://tips.tricks.yabumaru.jp/

にアクセスすると

/home/tricks/svn_work/tips/httpd

がドキュメントルートになります。

新たにサイトを増やす際にはディレクトリを作成してDNSを設定すれば完了です。
Apacheの設定ファイル(httpd.conf)を編集したり、再起動しなくても不要なので便利です。

以下は設定例です。

NameVirtualHost *:80

LogFormat "%V %h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" vcombined

<virtualhost *:80>
  ServerName          yabumaru.jp
  VirtualDocumentRoot /home/%2/svn_work/%1/httpd

  ErrorLog     logs/error_log
  CustomLog    logs/access_log vcombined
</virtualhost>

詳しくはこちら

DEPRECATION WARNING: end_form_tag

ログを確認していると、end_form_tag がどうとかって警告が出続けている。

DEPRECATION WARNING: end_form_tag is deprecated and will be removed from Rails 2.0 See http://www.rubyonrails.org/deprecation for details. …

どういうことか調べてみると、フォーラムに何か書いてある

It means you should replace this

どうやら end に置き換えなさいということらしいので言われたとおりに置き換える

end_form_tag ⇒ end

・・・エラーじゃん???

改めてエラーログを再度確認してみると「from Rails 2.0」って書いてるよ ( ̄~ ̄;)
最後までちゃんと読まないとダメですね。

Amazonで提供されているWebサービスまとめ

Amazonで提供されているWebサービスをまとめてみました。

1.Amazon Web Services

サービス名 略称 課金 説明
Amazon Associates Web Service A2S 無料 書籍情報などを提供するAPI群。
Amazon Elastic Compute Cloud Amazon EC2 従量制 仮想マシンレンタルサービス
Amazon DevPay 従量制 Amazon EC2上で動かすサービスに対して開発者が課金する手段を提供
Amazon Simple Storage Service Amazon S3 従量制 大容量ストレージサービス
Amazon SimpleDB [Limited Beta] 従量制 巨大で単純なデータベースサービス
Amazon Simple Queue Service Amazon SQS 従量制 メッセージキューサービス
Amazon Mechanical Turk [Beta] 従量制 人的タスクをAPIとして提供
Amazon Flexible Payments Service Amazon FPS 従量制 柔軟な決済サービス[Limited Beta]
Alexa Web Search 従量制 Web検索エンジン
Alexa Web Information Service 従量制 サイトに関するトラフィックなどの情報を提供
Alexa Top Sites 従量制 トラフィックの多いサイトを列挙
Alexa Site Thumbnail 従量制 サイトのスクリーンショットを提供

2.Amazon EC2の料金(起動時間)

Small(default) Large Extra Large
料金 0.1$/h 0.4$/h 0.8$/h
インスタンス数 1 2 2
CPU 32bit 1core 64bit 2core 64bit 4core
メモリ(GB/インスタンス) 1.7 7.5 15
ディスク(GB/インスタンス) 160 850 1,690

3.Amazon EC2/S3の料金(転送量)

アップロード 0.10$/GB
ダウンロード(1ヵ月の転送量) 0~10TB 0.17$/GB
10~50TB 0.13$/GB
50~150TB 0.11$/GB
150TB~ 0.10$/GB

4.Amazon S3の料金(保存容量とリクエスト回数)

保存容量(1ヵ月) 0.15$/GB
リクエスト 0.01$/1,000回(アップロード・リスト)
0.01$/10,000回(ダウンロードなどその他)

Poderosaで公開鍵認証

OpenSSH で生成した秘密鍵を使って Poderosa で公開鍵認証をしようと思ったのですが
「Wrong Key Format」なるアラートがでて困り果てました。

いろいろ調べてみると

OpenSSHの鍵ファイルは変換しないと使えない

・・・それ先に言ってくださいzz

SECSH 形式への変換方法
PuTTYに付属している「PuTTYgen」というプログラムを利用します。
※このままPuTTYに乗り換えてもいいんジャマイカ?

  • PuTTY(SSHクライアント)をインストールしてください。
  • 更に日本語化するならPuTTYjpをインストールしてください。
  • PuTTYgenを起動します。
  • Loadボタンを押しOpenSSH 側で生成した秘密鍵を読込みます。
  • 秘密鍵を無事に読込めれば、以下のメニューを選択する
    Conversions ⇒ Export ssh.com key
  • SECSH 形式の秘密鍵の完成でーす!

SubversionとredMineのIDを連携してみる

プロジェクト管理ツール(redMine)を入れたのだから、redMineに登録されているアカウント情報をベースにリポジトリのアクセス制御を実現したいということで、mod_auth_mysqlモジュールを使ってSubversionとredMineのIDを連携してみることにしました。

ひとまず以下のルールで

  • プロジェクト名 ⇒ my-project (redMineの識別子も同じく)
  • リポジトリパス ⇒ /var/svn/my-project/repos
  • リポジトリはプロジェクト単位で作成
  • リポジトリへのアクセスはプロジェクトの参加メンバーのみ

以下の内容で httpd.conf を編集すれば無事連携完了です。

※[username]、[password]、[database]は適宜書換えてください。

<location /svn/my-project>
    DAV      svn
    SVNPath  /var/svn/my-project/repos
    Require  valid-user

    # mod_auth_mysql
    AuthName "My Projects"
    AuthType Basic
    AuthMySQLEnable on
    AuthMySQLUser [username]
    AuthMySQLPassword [password]
    AuthMySQLDB [database]
    AuthMySQLNameField login
    AuthMySQLPasswordField hashed_password
    AuthMySQLUserTable "users,members,projects"
    AuthMySQLUserCondition "users.id=members.user_id and projects.id=members.project_id and projects.identifier='my-project'"
    AuthMySQLPwEncryption sha1
 </location>

Subversion でリポジトリのパスを変更したい

OpenLDAPの導入失敗など幾多の試練を乗り越え(?)
ようやくプロジェクトサーバのセットアップが完了しました。

っで、点在しているリポジトリをプロジェクトサーバに集めているんですが
作業コピーでは元のパスにアクセスできなくなってしまいました。。。

新しい作業コピーをチェックアウトすんのもやだなぁー
と思って調べていると、あるもんですね~

svn switch というコマンドを使ってパスを書き換える方法がありました。
探せばなんとかなるもんだ
※尚、指定するリポジトリURLは適切なものに変更してください。

# svn switch --relocate https://old_url/repos https://new_url/repos

正しく変更されたか確認

# svn info
パス:
URL: https://new_url/repos/svn/project/trunk
リポジトリのルート: https://new_url/repos/svn/project
リポジトリ UUID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
リビジョン: 954
ノード種別: ディレクトリ
準備中の処理: 特になし
最終変更者: yabumaru
最終変更リビジョン: 954
最終変更日時: 2008-05-07 10:42:08 +0900 (水, 07  5月 2008)

う~ん、トレビア~~~ン!