よかろうもん!

アプリからインフラまで幅広くこなすいまどきのクラウドエンジニアが記す技術ブログ

Rails

OpsWorksでRailsアプリからAmazon RDSなどの外部DBを利用する方法

前回は、『OpsWorksでRailsをデプロイする際にasset:precompileを実施する方法』というタイトルで、デプロイフックの仕組みについて紹介しました。今回は、Amazon RDSのようなデータベース・サーバが別インスタンスで稼働している場合を想定して、どのように…

OpsWorksでRailsをデプロイする際にasset:precompileを実施する方法

OpsWorksでRailsアプリケーションを運用するために知っておくべきことを数回に渡り本ブログで紹介していきます。今回はOpsWorksのデプロイフックを利用する方法です。Railsでは、JavaScriptやCSSを結合して圧縮することで、ブラウザがウェブページを描画する…

debugger-linecache のbundle に失敗したら

以下のように debugger-linecache のbundle時に失敗したときの対応メモ。 Installing debugger-linecache (1.1.2) with native extensions Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. /Users/interu/.rbenv/versio…

ニフティクラウドC4SAでrailsアプリを動かしてみた vol.1

先日正式公開されたアプリケーションプラットフォーム「ニフティクラウド C4SA(シーフォーエスエー)をさっそく利用してみました。 Perl / Python / Ruby / CakePHP / Ruby on Railsなど様々なコンテキストが提供されていますが、今回はRuby on Railsを試…

Microsoft Office 2007/2010のファイルから全文字列を抽出できるgemを公開しました!

Office 2007 以降、ワード/エクセル/パワーポイントのファイル保存形式がOffice Open XML形式となりました。 そのため、Office 2003 以前のファイルから文字列を抽出するために使っていた xlhtml や ppthtml 等では抽出することができなくなっています。 な…

Facebookから社内ADまで、外部サービスと連携するときに知っておくと役に立つライブラリ

外部サービスと連携すると、連携するサービスの状況に依存していろいろなエラーが発生したりします。 例えば外部サービスが高負荷であるために、タイムアウトのエラーが発生したり、強制的にコネクションをリセットされるようなエラーなど様々です。 その状…

capybara-webkit のbundleに失敗したら。

以下のようにcapybara-webkit のbundle時に失敗したときの対応メモ。 Installing capybara-webkit (0.8.0) with native extensions /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/installer.rb:482:in `build_extensio…

after_updateなどのActiveRecordのCallbackを実行しないようにする方法

Objectの追加/削除/変更時に、after_createやafter_updateのようなcallbackが実行されないようにしたい場合があります。 簡単にcallbackが実行されないようにできないかを調べてみると、各Railsのバージョンで変化はしているものの、どのバージョンでも簡単…

SonicGarden検定で作ったアプリ〜2011年(冬)〜

@kuranukiのブログで『ビジョン合宿に行ってきました』の記事中にあるSonicGarden検定という名のアプリ開発で私が作ったものを晒してみます。このSonicGarden検定では、foursquareのようなモバイル向けアプリを作るのですが、最低限で以下のような機能を満た…

bundle install時にnative extensions errorが発生する場合はメモリ不足の可能性があるかも!?

Amazon EC2の低スペックインスタンス(Micro instance)で、bundle installすると、native extensionのインストールでエラーが発生する場合があります。 インストール時に必要となるライブラリが本当に足りない場合は、必須ライブラリをインストールする必要が…

script/consoleでroutesのpathやurlを表示する方法

script/consoleでroutesで定義したurlやpathを出力してみたい場合、普通にusers_urlなどを入力してもNameErrorとなってしまいますが、どうにかして表示させたい場合は下記の2つのやり方があります。■方法(1) script/consoleを起動すると、標準でActionContro…

script/consoleでhelperのメソッドを実行する方法

railsでアプリを開発していると稀にhelperメソッドをconsoleで試してみたくなる場合があります。 そんなときは、以下の初期化をすることでhelperのメソッドを実行して試すことができるようになります。 $ script/console hoge = ActionView::Base.new hoge.e…

RailsアプリケーションにてClamAVを利用してリアルタイムにウィルス・スキャンを実現する方法

ファイルのアップロード機能を有するアプリケーションを運用している場合は、ウィルスに感染したファイルがアップロードされることを考慮する必要があります。もし何も対策していない場合、ウィルスに感染しているファイルがアップロードされ、そのファイル…

アプリケーションに依存するバッチを"アプリケーションで自動生成"してcronに登録する方法

バッチ処理で一括処理を行うようなアプリケーションは多いかと思います。 ですがこのバッチ処理の設定をするときに、以下のようなシーンで悩まされることが多々あります。マニュアル関連の問題として、 マニュアルを読みあさらないとわからない バッチに関す…

これを知っておかないと、MySQLサーバの再起動でDBデータの不整合が発生するかもしれません!

Railsに限らず、MySQL(Innodb)を利用したサービスを開発/運用しているなら、これから解説する内容を知っておかないと、予期しないデータ不整合を発生させてしまうかもしれません。 データ不整合が発生してしまったら、本来あるべき状態に戻すのはかなり難易…

Passenger + monit でリリース作業をより簡単にする方法

PassengerでRAILSアプリを運用しているなら、アプリのリリース時には、${RAILS_ROOT}/tmp/restart.txt を配置/更新することで、ほぼダウンタイム無し(httpdの再起動なしのため)にリリースしているかと思います。ただ、アプリケーションのソースコードの影響…

find と find_by_ の使い分け

タイトルのメソッドを使い分けるポイントを忘れがちなのでエントリとして残しておく。find と find_by_ の振る舞いで異なる点は以下のとおり。 検索で複数件がヒットする場合、find では複数結果を配列で返すが、find_by_ は1件のみ返す 検索で1件もヒットし…

Redmineのファイル保存先を変更する

Redmineを運用している方は、Redmine用のDBスキーマであったり、アップロードされたファイルを定期的にバックアップされていると思います。 そして、バックアップのこと等を考慮して、アップロードされたファイル等はある特定のデータ領域に保存しておきたい…

Lighttpdの設定で注意すべきこと

「Rails製のOP(OpenID Provider)をMongrelで動かすと問題なく動作するが、Lighttpdで動かすとうまくいかないよ!」とお困りの方がいらっしゃいましたら、是非このエントリを読んでみてください。OpenIDのOPをLighttpdで動かす時には、注意しないとLighttpdの…

migrateでストレージエンジンを指定

railsアプリケーションを動作させるためには、DBのmigrateをしてコマンド一発でテーブルの作成および変更ができます。そのため、利用者は安易に構築ができるようになるのですが、裏ではどのような処理が走っているのでしょうか? 今回はMySQLのドライバにつ…