RubyMine6.0でRuby2.0、Rails4をデバッグする
Ruby2.1が出たようですが、タイトル通りRuby2.0、Rails4のデバッグ環境として
RubyMine6.0をインストールし、設定しました。
以下、躓いた点と手順を備忘録として挙げておきます。
■RubyMine6.0をインストール
他のサイトに丁寧に解説されているので、そちらを参考にして下さい。
参考サイト
はたふりの興味津々: RubyMineのインストール
1.Rubyのスクリプトのデバッグを開始すると、ruby-debug-ideが必要とのエラーが出る。
2.RubyMineやコンソールからruby-debug-ideをインストールしようとすると
以下のエラーが表示される。
No source for ruby-2.0.0-p353 provided with debugger-ruby_core_source gem.
3.以下のコマンドを実行し、debugger-ruby_core_sourceをインストールする。
$ debugger-ruby_core_source
4.RubyMineでデバッグを開始し、ダイアログに従いruby-debug-ideをインストールする。
5.(もしからしたら)コンソールよりruby-debug-baseをインストールする。(よく覚えていない)
6.スクリプトのデバッグを実行し、ブレークポイントで止まることなどを確認する。
既存のRailsアプリをデバッグする場合、pry-debuggerとは同時に使用できないようです。
なので、手順は以下の通りです。
1.Gemfileよりpry-debuggerの定義を外す
参考サイト
http://friendfeed.com/rubymine/33eb9fe9/rubyminerailsdebugpry-debugger-idedebug
以上です。
gemを使わずにAngularJSを使用する - ロード時にAngularJSのソースを表示させない
Ruby on Railsにてgemを使わずに、AngularJSを使おうとしたら
AngularJSにより生成されたHTMLが表示される前に
AngularJSのソースが表示される問題に出くわしました。
意外にも苦戦したので、やり方をメモして置きます。
(gemで用意されていないバージョンを使う場合などを想定しています。)
■Rails、AngularJSのバージョン
・Rails 4.0.0
・AugularJS 1.2.3
■手順
1.AngularJSのサイトより、zipをダウンロードする。
2.zipを解凍し、angular.min.js、angular-resource.min.jsを
\app\assets\javascriptsにコピーする。
3.application.html.erbのhtmlタグに"ng-app"を追加する。
<html lang="en" ng-app>
ここまでは、通常の手順だと思います。
AngularJSではheadタグ内にscriptタグを出力しないと、上記の
事象が起こるようなので、以下の対策を行います。
4.application.html.erbのjavascript_include_tagを、headタグ内に
移行する。
<head>
以下略
<%= javascript_include_tag "application" %>
</head>
5.AngularJSのソースを記述し、実行する。
これで、ロード時にAngularJSのソースは表示されず、AngularJSにより
生成されたHTMLが初期表示されるはずです。
なお、Railsのデフォルトの設定である、bodyタグの最後でJavaScriptを
読み込ませたい場合は、以下のようにすることができます。
(他にもやり方はあると思いますが・・・)
6.\app\assets\javascriptsの中に、フォルダを作成する。
7.フォルダの中に、bodyタグの最後でロードしたいJavaScriptを格納する。
8.application.html.erbのbodyタグの最後(javascript_include_tagがあった行)
に、先のフォルダのJavaScriptをロードするよう記述する。
<%= javascript_include_tag "フォルダ名/ファイル名" %>
</body>
以上です。
参考サイト
AngularJSでロード中に評価前のマークアップを表示させない方法 - Qiita [キータ]
railsでiphone対応をする基礎知識的な - kobaken75の日記
自動車の動画収集サイトを作りました
タイトルにある通り、Webサイトを作ってみました。
http://www.carvideocollector.net/
Youtubeから自動車の動画を定期的に検索し、自サイト内にリンクをアップするのと
twitterへの投稿を行っています。
作ってみた目的としては、Ruby on Rails、AWSに慣れておきたかったのと
自動車の動画のリンクを定期的にtweetしてくれるbotが欲しかったためです。
まあ、完全に俺得なサイトです。。。
使用した技術としては
・Ruby2.0
・Rails4
・Nginx
・Unicorn
・Amazon EC2上で稼動
という状態です。
これからも自分の勉強がてら、ちょくちょくと手を入れていくつもりです。
Nginx、Unicornにてapplication.rbの変更を反映する
タイトル通りのことをするために自分が行った操作を
メモとして書いておきます。
具体的には、Nginx、Unicornをそれぞれ再起動しました。
(プライベートのアプリだから許されるかも。24時間稼動のシステムでは・・・?)
■Nginxの再起動
以下のコマンドを実行する。
$ /etc/init.d/nginx restart
■Unicornの再起動(ついでに開始、終了も)
Unicornをデーモンとして起動している場合
プロセスの再起動を行う。
1.UnicornのプロセスIDを取得する。
$ ps -ef | grep unicorn | grep -v grep
以下のような感じで、プロセスが取得できる。
user 1912 29572 0 01:17 ? 00:00:07 unicorn worker[0] -c config/unicorn.conf -D
user 1915 29572 0 01:17 ? 00:00:09 unicorn worker[1] -c config/unicorn.conf -D
user 29572 1 0 Nov16 ? 00:00:02 unicorn master -c config/unicorn.conf -D
2.masterプロセスの再起動
masterのプロセスID(上記の例では29572)を指定し、プロセスを再起動する。
$ kill -HUP masterのプロセスID
3.プロセスの終了
$ kill -QUIT masterのプロセスID
4.Unicornの起動
アプリケーションのrootフォルダに移動し、以下のコマンドを実行する。
$ unicorn -c config/unicorn.conf -D
(config/unicorn.conf は、unicornの定義ファイルのパス)
※productionモードの場合は、-E productionを追加する。
以上です。
Amazon EC2上でRailsアプリをRails + Unicornで動かす
タイトル通りのことをしてみました。
やり方自体は、既に他のサイトで沢山取り上げられているのですが
自分が注目したポイントや、躓いたところを中心に書いていきたいと思います。
前提条件として
・EC2のアカウントが作成済みで、コンソール(TeraTerm等)でログインできる
・FTPなど、何らかの方法でRailsアプリをEC2に転送できる
状態であるものとします。
■(rootでログインしていない場合)root権限を取得する
sudo su
■Ruby、Rails、Nginx、Unicornのインストール
1.以下のコマンドを順次実行する。
$ yum install gcc
$ yum install gd-devel
$ yum install openssl-devel
$ yum install libxml2-devel
$ yum install libxslt-devel
$ yum install geoip-devel
2.rvmをインストールする。
$ bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
3.railsをインストールする。
$ gem install rails -v 4.0.0
$ rails -v
4.Nginxをインストールする。
$ yum -y install nginx
起動するか確認する。
$ /etc/init.d/nginx start
5.Unicornをインストールする。
$ gem install unicorn;rbenv rehash
■Railsアプリの配置
1.アプリをコピーする。
自分の場合はWinScpで、home/ログインユーザ にアプリをコピーし
コンソールで配置したいフォルダに移動しました。
(WinScpのユーザでは、アプリを配置したい箇所にコピーする権限がないため)
2.bundle installを実行する。
Gemfileに必要なgem記述し、本番環境用のbundle installを実行します。
$ bundle install --without test development
が、sqllite3のインストールで以下のエラーが発生しました。
ERROR: Failed to build gem native extension.(中略)
sqlite3.h is missing. Try 'port install sqlite3 +universal'
or 'yum install sqlite-devel' (後略)
メッセージに従い、以下のコマンドにてsqlite3をインストールします。
$ yum install sqlite-devel
この後、再びbundle installを行います。
$ bundle install --without test development
■Nginx、Unicornの設定
1.Nginxの定義ファイル設定
$ vi /etc/nginx/nginx.conf
nginx.confの中身は以下のように記述する。
worker_processes 1;events {
worker_connections 1024;
}http {
upstream unicornapp {
server unix:/tmp/unicorn_app.sock;
}server {
listen 80;
server_name localhost;location / {
proxy_pass http://unicornapp;
}
}
}
2.Unicornの定義ファイル設定
$ cd アプリフォルダ
$ vi config/unicorn.conf
unicorn.confの中身は以下のように記述する。
worker_processes 2
listen '/tmp/unicorn_app.sock'
stderr_path File.expand_path('unicorn.log', File.dirname(__FILE__) + '/../log')
stdout_path File.expand_path('unicorn.log', File.dirname(__FILE__) + '/../log')
preload_app true
重要なのは、nginx.confの「server unix:/tmp/unicorn_app.sock;」と
unicorn.confの「listen '/tmp/unicorn_app.sock'」で指定するsocketのパスが
一致することです。
■Nginx、Unicornの起動
1.Nginxを起動する。
$ /etc/init.d/nginx start
2.Unicornを起動する。
$ cd アプリフォルダ
unicorn -c config/unicorn.conf -D
■アプリの稼動確認
ブラウザにてEC2のURLを叩き、アプリの画面が表示されることを確認します。
http://xxx.compute.amazonaws.com/
参考サイト
http://blog.yatm.info/?p=608
http://qiita.com/KazuyoshiUeno@github/items
http://qiita.com/KazuyoshiUeno@github/items/296aa3af986b4bffe7d8
https://gist.github.com/honjo2/5023446
http://prototype-beta.com/server/entry/12_ubuntuでnginx_+_unicorn_-_設定編
VirtualBoxでspringを動かしてみる
遅ればせながら、Railsのpreloaderとしてspringを使ってみました。
理由は、今まで使っていたsporkだと、コンソールが2つ必要になるのが
springでは一つになりそうだからです。
(sporkの起動に一つと、その他のコマンドの実行に一つ)
特にRSpecからデバッグする時、RSpecの起動と、デバッガがブレークポイントを示す
コンソールが異なるのが、不便でした。
以下、手順です。VirtualBoxでspringを実行する際には(他の仮想マシンでも同じか?)
下記に書くようなエラーが起きるので、単純にspringをインストールするだけでは
実行できないです。
1.springのインストール
以下のコマンドを実行する。(Gemfileに書いてbundle installは非推奨らしい)
$ gem install spring
2.springをロードし、rspecを起動してみる。
$ spring rspec spec/
3.以下のエラーが発生する。
`rescue in start_server': Spring is unable to create a socket・・・
良く見ると、エラーメッセージに以下のような解決策が書いてある。
You may need to set the SPRING_TMP_PATH environment variable to use a different path.
4.SPRING_TMP_PATHを設定するため、以下のコマンドを実行する。
$ mkdir ~/spring_tmp
$ export SPRING_TMP_PATH=spring_tmpのパス
5.手順2.を実行し、起動できることを確認する。
6.springが起動できることが確認できたら、~/.bashrcに以下を追記する。
export SPRING_TMP_PATH=spring_tmpのパス
以上です。spring上でのRSpecを起動と、pry debuggerの操作が
一つのコンソールで出来ることを確認しました。
※参考サイト
ruby on rails - Spring wil not start - Stack Overflow
Rails 4 に移行するため、再構築する手順
Rails 3.2系からRails 4 に移行を試みたのですが、警告などが多数出ます。
一層のことアプリを再構築してしまえば・・・、ってことでやってみました。
以下、その時の手順です。
Rails 4 の環境構築ができていることを前提とします。
■アプリの再構築
1.移行元のアプリをフォルダごと退避
2.アプリ作成
rails new アプリ名 -T
3.appフォルダをコピー
4.dbフォルダをコピー
5.Gemfileの必要な行をコピーし、以下のコマンドを実行
bundle install
6.rails s にて起動し、ブラウザにて確認
■deviseを使用している場合
1.deviseを入れている場合、Railsを起動すると、以下のエラーが発生
「Devise.secret_key was not set. Please add the following to your Devise initializer: (RuntimeError)」
2./config/initializers/devise.rbをコピーして解決
■ActiveRecordのfind(:all)を使用している場合
1.アプリを動かすと、以下の警告が発生
「DEPRECATION WARNING: Calling #find(:all) is deprecated.」
find(:all)は今後推奨されなくなるらしい。
2.自分の場合は、以下のように修正して解決
モデル名.find(:all)
↓
モデル名.allモデル名.find(:all, :limit => 10, :order => "created_at DESC")
↓
モデル名.limit(10).order("created_at DESC")
■pryを使用している場合
1.Gemfileに入れて、以下のコマンドを実行
bundle install
2. .pryrcをコピーする。