@odailly_jpさんがrailsを(最新版をちゃんと)使ってる会社に就職が決まり、昨日最終日だったのでささやかな送別会をやりました。
怖話のcontributionを見るとごく短期間なのに歴代5位のcommit量で素晴らしい。
当たり前なんだけど、怖話にとってありがたい人ほど早く就職が決まって卒業していってしまいます。残念なことです。
しかし、ruby界隈にいる限り顔を合わせることも多いでしょう。
@odailly_jpさんがrailsを(最新版をちゃんと)使ってる会社に就職が決まり、昨日最終日だったのでささやかな送別会をやりました。
怖話のcontributionを見るとごく短期間なのに歴代5位のcommit量で素晴らしい。
当たり前なんだけど、怖話にとってありがたい人ほど早く就職が決まって卒業していってしまいます。残念なことです。
しかし、ruby界隈にいる限り顔を合わせることも多いでしょう。
Herokuでrootドメインを独自ドメインで使う - komagata
このエントリー経由でDozensにサインアップしてくれる人が結構いるらしい。エントリーを書いた人間として紹介したかいがあったというものだが…
---------------------------------------------------------------------------------
このメールは【Dozens】より自動的に送信されています。
お心当たりの無い場合や、ご不明な点がありましたら
お問い合わせフォームよりご連絡をお願いいたします。
---------------------------------------------------------------------------------
komagataさん、こんにちは。
Dozensお友達紹介キャンペーンのご利用ありがとうございます。
あなたの招待コードからDozensへの登録がありましたので、
あなたの基準レコードは、 213から216へ増えました!
ぜひご活用ください。
今後ともDozensをよろしくお願いします。
---------------------------------------------------------------------------------
Dozens
http://dozens.jp/
contact@dozens.jp
そんなに使えるDNS Record増えてもどないせっちゅー…。
railsでいつも下記のようにしてたのでgemにしました。
# lib/seed_helper.rb:
require 'active_record/fixtures'
module SeedHelper
def import_fixture(name)
puts "Import #{name}..."
ActiveRecord::FixtureSet.create_fixtures \
"#{Rails.root}/db/fixtures", name
end
end
# db/seeds.rb:
require 'seed_helper'
include SeedHelper # この2行がウザい
import_fixture :users
import_fixture :posts
seed系のgemはたくさんあるけど俺にはどれもオーバースペックだったので。
使い方
$ mkdir db/fixtures
$ vi db/fixtures/users.yml
user_1:
name: Jean Valjean
user_2:
name: Bishop Myriel
user_3:
name: Cosette
$ vi db/seeds.rb
import_fixture :users
$ rake db:seed
Import users...rubyのIDEではRubyMineが有名だけど有料なのでEclipse+RDT(Ruby Development Toolkit)を試してみました。(Aptana Studio 3 Pluginは使わない)
eclipseのサイトからMac OS X 64 Bit版をダウンロード。この時のバージョンは4.3.2でした。
-All Available Sites--にしてrubyで絞り込むとRDTが出てくるのでインストール。
PreferencesでRubyのInterpretersを追加。上記のようにrbenvを使ってる場合はshims/rubyを指定すればOKでした。
Enginesで何でdebugするのかというのを選びます。他のはgemが必要だったりバージョン毎に動いたり動かなかったりするのでRuby Build-In Debuggerを選択。
これは普通にできる。トップレベルのlocal変数が見れない気がするけど。
これも普通に実行するとhttp://localhost:4567/とかで立ち上がるのでブラウザからアクセスするとちゃんとブレイクポイントで止まってくれる。
怖話で試してみる。
これも要はscript/rails serverを実行してhttp://localhost:3000/にアクセスすればいいだけだからDebug Configurationsで下記のようなものを用意する。
実行するスクリプトはscript/rails
引数はserver。
ただでさえ遅い怖話のデバッグ起動はクッソ重いので覚悟すること。
ちゃんとブレイクポイントの上の行の@nowがとれてます。
ややこしいプロジェクトの厄介なバグを本腰入れて追い回す時には良いかも。ただほんとに重いので軽快にdebugしたいならpry-byebugの方が良いかな。
ruby1.9からのnew hash syntaxがエラーと認識されている。RDTのどこかで設定できるのかな?
$ brew update
$ brew upgrade rbenv ruby-build
$ CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl` --with-readline-dir=`brew --prefix readline`" rbenv install 2.1.2
$ rbenv global 2.1.2
$ gem install bundler rbenv-rehashEngine Yard Cloudを使っててrailsのproduction.logをちょっとしたフィルターかけてサッと見たい。(productionでのバグの原因究明などで)
production.logを探るのってEYCに限らず、機会が多いわりに面倒臭い。
$ scp deploy@app.kowabana.jp:/data/kowabana/shared/log/production* .
$ gzip -d production.log-*.gz
$ grep -r 'foo' .
とか。productionサーバーへのアクセス権がある人しか見れないのも手軽じゃない。
次からはこんなことしたくないのでEYCのlogentries addonを使ってみた。logentriesは無料でも使える範囲が大きいし、以前使ったことがあるので慣れているのでちょうどいい。
Getting started with Logentriesの通りに進めていき、下記のようにproduction.logを追加した。
diff --git a/cookbooks/le/recipes/configure.rb b/cookbooks/le/recipes/configure.rb
index 8a4432d..8225077 100644
--- a/cookbooks/le/recipes/configure.rb
+++ b/cookbooks/le/recipes/configure.rb
@@ -16,6 +16,7 @@ follow_paths = [
]
(node[:applications] || []).each do |app_name, app_info|
follow_paths << "/var/log/nginx/#{app_name}.access.log"
+ follow_paths << "/data/#{app_name}/shared/log/production.log"
end
upload, applyしてからLogentriesのDashboardにアクセス。
自前でログサーバー作ってアレコレすると大変なので手軽で重宝しそうです。
@yukihrに聞いて衝撃を受けた設定。
人類が有史以来cmd-qによって失った生産性の低下はcrontab -rと合わせると第二次世界大戦に匹敵すると言われています。
何故頻繁に使うcmd-wの横に破滅的なキーを置くのか。crontab -eの隣に置くのか。(Dvorak民大勝利とかいってるそこのあなた。人類全体のことを考えなさい!)これは人類にとっての損失です。
そこで手軽にその悲劇を防ぐ方法が発明されました。
spotlightをcmd-qに割り当てましょう。
spotlightの設定画面からやろうとしてはいけません。cmd-qを押したら設定Windowが閉じてしまうからです。あー忌々しい。
KeyboardのShortcutの設定からならWindowを閉じることなく設定できます。
ついでにIDEで補完に使われることの多いC-Spaceも空いて一石二鳥!
God bless you.
sinatraはset :foo, 'bar'みたいなDSLを使って値を設定できる。でもこの値ってどこにどうやって保存されているんだろう?
普通、最終的にはインスタンス変数かクラス変数に格納されてるって思うよね。
(class << self; self; end).class_eval do
undef_method(name) if method_defined? name
String === content ? class_eval("def #{name}() #{content}; end") : define_method(name, &content)
end
sinatra/lib/sinatra/base.rb at v1.4.5 · sinatra/sinatra
ところがset :foo, 'bar'するとbarを返すfooというメソッドが定義されるという形で保存されている。
setするたびにundef_methodして定義し直すので変数みたいに使えるようだ。静的な頭で考えてたのでクラクラするような格納方法だ。
$LOADED_FEATURESっていうのがある。
% pry
[1] pry(main)> $LOADED_FEATURES
=> ["enumerator.so",
"/usr/local/opt/rbenv/versions/2.1.0/lib/ruby/2.1.0/x86_64-darwin13.0/enc/encdb.bundle",
"/usr/local/opt/rbenv/versions/2.1.0/lib/ruby/2.1.0/x86_64-darwin13.0/enc/trans/transdb.bundle",
"/usr/local/opt/rbenv/versions/2.1.0/lib/ruby/2.1.0/x86_64-darwin13.0/rbconfig.rb",
"/usr/local/opt/rbenv/versions/2.1.0/lib/ruby/2.1.0/rubygems/compatibility.rb",
"/usr/local/opt/rbenv/versions/2.1.0/lib/ruby/2.1.0/rubygems/defaults.rb",
"/usr/local/opt/rbenv/versions/2.1.0/lib/ruby/2.1.0/rubygems/deprecate.rb",
"/usr/local/opt/rbenv/versions/2.1.0/lib/ruby/2.1.0/rubygems/errors.rb",
"/usr/local/opt/rbenv/versions/2.1.0/lib/ruby/2.1.0/rubygems/version.rb",
(snip)
ほうほう。
rubygems - How do I get a list of files that have been `required` in Ruby? - Stack Overflow
$ brew install dart
$ which dart
/usr/local/bin/dart
hello.dart:
#!/usr/bin/env dart
void main() {
print('Hello Dart.');
}
$ chmod u+x hello.dart
$ ./hello.dart
Hello Dart.