VirtualBox上のCentOSでルートディレクトリを拡張する
主にRubyの開発で使用しているVirtualBox上のCentOSにて
ルートディレクトリの容量が不足しているとの警告が出始めました。
いろいろ調べて実行してみた結果、以下のサイトの記事が参考になったので
リンクを載せておきます。
Linuxのディスク管理の仕組みについて(LVMについて)
VirtualBox環境構築:CentOS - ハードディスク拡張
ディレクトリの拡張方法
VirtualBoxのCentOS環境のディスク容量を増やす [ freespeedo's blog ]
以上です。大変詳しく書いてあるので、特に自分が追記することはないですね(笑)
初めてのAmazon EC2 - 1.ユーザー登録からOSへのログインまで
クラウドのディファクトスタンダードとなっているAmazon EC2を
触ってみました。
さすがに情報は沢山あるのですが、それでも躓いたところがあるので
(それから今後もあると思うので・・・)、解決策を書いていきたいと思います。
まず、自分の場合は数ある情報の中から
Amazon Web Services入門 (全17回) - プログラミングならドットインストール
を参考にし、紹介されている手順通りに進めました。
このブログを書いている時点では、スクリーンショットなども紹介されている
通りです。
ですが、以下の点に躓いたので、書いておきます。
1.Amazonユーザー情報の登録時にエラー
氏名・住所・住所番号を入れる画面でエラーが発生しました。
メッセージとしては、入力が間違えているか同意事項にチェックがない、というような
内容だったと思います。
解決策としては、電話番号欄に国を識別するコード(日本であれば+81)を入力すれば
大丈夫です。
こんな感じです。
+81-09011112222
2.TeraTermで「無効なホスト」エラー
Amazon Web Services入門 (全17回) - プログラミングならドットインストールでは違いましたが
自分はWindowsで作業しているので、SSH接続にはTeraTermを用いようとしました。
が、「無効なホスト」というエラーで接続できませんでした。
TeraTermのホスト名に「ssh -i app_name.pem ec2-user@00.000.000.000」を入力すると
起きるようです。
使用インスタンスのパブリックDNSである「ec2-**********.compute-1.amazonaws.com」を
入力すると接続できます。
後はユーザー名に「ec2-user」、パスワードは空で
"RSA/DSA鍵を使う"欄にはダウンロードした.pemファイルのパスを指定します。
以上、Amazon EC2 のユーザー登録からOSログインまでで躓いたところでした。
RailsのModel内でYoutube動画を検索する
タイトル通り、RailsのModel内でYoutube動画を検索してみました。
RubyでYouyube動画を検索する方法はネットで調べれば
直ぐに分かりますが、備忘録として載せておきます。
今回は以下のサイトを参考にしました。(てか、ほとんど真似ている・・・)
RubyプログラムからYouTube Data APIを使って動画検索 : 兀兀 -プログラミング編-
以下、手順です。Railsのプロジェクトは作成済みとします。
1.Gemfileに以下を記述し、bundle install。
gem 'nokogiri'
2.Youtubeから検索するためのVideoモデルと、RSpecのvideo_specを作成する。
3.videoモデルにsearch()メソッドを追加し、上記サイトのサンプルソースを貼り付け、実行すると以下のエラー。
dynamic constant assignment
原因は"URL"が大文字であるため、定数として認識されるため。
"URL"をメソッドの外に出す。
4.ここまででYoutubeから検索はできるが、今回の要件に合わせて次の変更を加えた。
・検索キーワードは引数で渡されるようにする。
・検索したYoutube動画のタイトルと、動画のID?をArticleモデルに入れて返すようにした。
以上です。参考までに作ったソースを載せておきます。
video.rb
require 'nokogiri'
require 'open-uri'class Video < ActiveRecord::Base
URL = 'http://gdata.youtube.com/feeds/api/videos?vq='def self.search(keyword)
keywords = URI.encode(keyword)
options = '&orderby=published'uri = URI(URL + keywords + options)
articles = []
doc.search('entry').each do |entry|
article = Article.new
article.title = entry.search('title').text
article.youtube_video = entry.xpath('media:group/media:player').first['url'].scan(/\bv=\w*/)[0].delete('v=')
articles.push(article)
endreturn articles
end
end
video_spec.rb
require 'spec_helper'describe Video do
describe "search" do
it "youtubeから検索すること" do
articles = Video.search('Top Gear - BBC')
expect(articles.count).to be > 0
expect(articles[0].title).should_not eq("")
expect(articles[0].youtube_video).should_not eq("")
end
end
end
Ruby on Rails - 入力した改行をそのまま表示する方法
textarea等から複数行の文章を入力した場合、データベースには
(デフォルトでは)改行コード込みでそのまま登録されます。
ですが、この登録された文章をラベルなどで表示した場合
改行コードが無視されてしまいました。
結局、simple_format()を使うことで解決しました。
simple_formatについては、以下のリファレンスを参考にしてください。
simple_format - リファレンス - Railsドキュメント
使い方は、こんな感じです。
simple_format(article.text)ここではArticleテーブルのtext列の値を表示しています。
以上です。
Ruby on Rails - .jsファイルが二重に読み込まれる
Ruby on Railsにて、Railsサーバを起動してブラウザよりアクセスしてみると
.jsファイルが二重に読みこまれる事象が発生しました。
状況としては
・application.jsには手を加えていない
・デフォルトでコントローラ名.js.coffeeが存在する
・JavaScriptを記述するため、コントローラ名.jsファイルを作成した
という状況です。
原因としては、Railsがコントローラ名.js.coffeeファイルを変換して
.jsファイルを作成したため、自分で作成したコントローラ名.jsファイルと
ファイル名が重なっていたためでした。
結局、.js.coffeeは削除することで、解決しました。
以上です。
分かってしまえば簡単ですが、意外と時間を食ったので
メモとして載せておきます。
Canvasに描いた画像をサーバに送信する
Canvas上で描いた絵は、クライアント上(つまりJavaScript)のcanvasオブジェクト
toDataURL()メソッドで画像として取得することができます。
今回は、Canvasに描いた絵を画像として取得し、Ruby on Railsのサーバに送信してみました。
この方法を用いれば、クライアント上でサインを署名し、サーバにて保存するようなアプリを
Webアプリとして実装できることになります。
以下、ソースです。
$("#save_button").click(function () {toDataURL()メソッドを使い、Canvas上に描いた絵(サイン)を取得しています。
data = canvas.toDataURL();
$.ajax({
type: 'post',
url: 'pictures/create',
data: {picture : data},
success: function(data){
$("#delete_button").click();
}
});
});
取得した画像を、ajaxを用いてサーバに送信しています。
2.Railsのコントローラ
def createparamsより画像データを取得し、デコードしています。
data = Base64.decode64(params[:picture])#この辺りで保存する。
#戻り値は適当。
render :json => nil
end
デコードするのは、JavaScriptのtoDataURL()メソッドで取得したデータは
Base64でエンコードされているためです。
後はコメントに書いたとおり、取得した画像データをサーバ内で保存すればいいと思います。
なお、画面のデザインや、Canvasを使用した絵を描く画面の作成については
[Web] スマートフォンとHTML5のCanvasを用いたお絵描きを実装してみた - YoheiM .NET
が大変参考になるかと思います。
以上です。
VirtualBox ゲストOSのWebサーバに外部から接続する
ゲストOS上で開発しているWebアプリに、スマートフォンなどの外部機器から
接続し、動作確認したいことがあるかと思います。
VirtualBoxを使用している場合
・ネットワークアダプタにブリッジアダプタを使用し、ゲストOSに固有のIPを振る。
外部機器からはゲストOSに、固有のIPで指定して接続する。
・ネットワークアダプタにNATを使用し、ポートフォワーディングでゲストOSに接続する。
外部機器からはホストOSのIPを指定して接続し、その接続をゲストOSにフォワードする。
このため、ネットワーク内のIPアドレスを増やす必要がない。
の2通りありますが、今回は手軽なNATを使用する手順について説明したいと思います。
以下、手順です。
ホストOSはWindows7、ゲストOSはCentOSです。
1.ネットワークアダプタの設定、確認
VirtualBox マネージャー上で仮想マシンを選択し、「設定」ボタンを押下します。
「設定」ダイアログ上の左から「ネットワーク」を押下し、アダプターの割り当てを「NAT」にします。
2.ポートフォワーディングの設定
上記画面の「ポートフォワーディング」を押下し、「ポートフォワーディングルール」ダイアログを
表示します。
右上の「+」ボタン(追加ボタン)を押下し、外部機器より接続するポートと、ゲストOS上のサーバの
ポートを設定します。
3.Windowsファイアウォールの設定
Windowsファイアウォールの「詳細設定」ボタンを押下し、「受信の規則」-「新しい規則」を
押下します。
ウィザードに従い、2.で設定した外部機器より接続するポートへの通信を許可します。
4.外部機器から接続してみる
スマホなどの外部機器のブラウザから
「ホストOSのIPアドレス:ポートフォワーディングするポート」にアクセスし
接続できることを確認します。
以上で、ネットワーク内のIPアドレスを増やすことなく、ゲストOS内のWebサーバに
外部機器から接続できるかと思います。