2013/12/29
今開いているファイルの *** をレジスタに
クリップボードと連携しておけば、さらに捗る。
2013/12/08
Redmineのプラグインで既存の文言を上書きする
この情報は Redmine 2.5 で不要になりました。→ tail -f pinzo.log: Redmine 2.5.0 からプラグインでの文言上書きが復活しています
Redmine のプラグインで本体の文言を上書きすることが出来ません。
昔はできたようなのですが、バージョンが違うのか I18n の仕様が変わったのか現在は出来ません。
ja:
project_module_documents: ドキュメント
project_module_calendar: 日程表
プラグインの ja.yml
にこんな記述をしても画面はかわりません。
通常、プラグインをロードすると、I18n.load_path
はこんな状態になります。
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.15/lib/active_support/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activemodel-3.2.15/lib/active_model/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.15/lib/active_record/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/actionpack-3.2.15/lib/action_view/locale/en.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/en.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/ja.yml
$REDMINE_HOME/config/locales/ar.yml
$REDMINE_HOME/config/locales/az.yml
$REDMINE_HOME/config/locales/bg.yml
--- 延々と Redmine 本体の言語ファイルが列挙
$REDMINE_HOME/config/locales/vi.yml
$REDMINE_HOME/config/locales/zh-TW.yml
$REDMINE_HOME/config/locales/zh.yml
rails/railties/lib/rails/engine.rb at 3-2-stable · rails/rails にあるように、I18n.load_path
の後ろのほうが優先度が高いので、本体の言語ファイルのほうが優先されてしまいプラグイン側で上書きすることができません。
プラグインの登録は config/initializers/30-redmine.rb
で行われていて、その際にプラグインの辞書ファイルが I18n.load_path
に登録されるのですが、この時点ではアプリケーション本来の辞書ファイルが登録されていないからでしょう。
じゃあどうすればいいのかというと、どこかで I18n.load_path
を調整して、プラグインの辞書ファイルを後ろの方にもっていくのがいいのかなと。
確実に行うなら、初期化完了時がよさげですね。
Rails::Engine
には after_initialize
という目的そのままの機能があるのでこれが使えそうです。
こんなコードを lib
あたりに突っ込んでおいて、init.rb
で require
すればOK。
I18n.load_path
はこんな感じになります。
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.15/lib/active_support/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activemodel-3.2.15/lib/active_model/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.15/lib/active_record/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/actionpack-3.2.15/lib/action_view/locale/en.yml
$REDMINE_HOME/config/locales/ar.yml
$REDMINE_HOME/config/locales/az.yml
$REDMINE_HOME/config/locales/bg.yml
--- 延々と Redmine 本体の言語ファイルが列挙
$REDMINE_HOME/config/locales/vi.yml
$REDMINE_HOME/config/locales/zh-TW.yml
$REDMINE_HOME/config/locales/zh.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/en.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/ja.yml
2013/12/07
Railsのログに出力されるパラメータとSQLを整形するgemを作った
最初に
この記事は Ruby on Rails Advent Calendar 2013 - Qiita [キータ] の7日目の記事です。
前日は a_suenami さんの Railsでサービスとフォームを導入してみる話 - assertInstanceOf('Engineer', $a_suenami) です。
本題
こういう gem を作りました。
pinzolo/rails-flog - Github
rails-flog - RubyGems.org
Gemfile に下記を追加して bundle install
するだけで、ログに出力されるパラメータとSQLが整形して出力されるようになります。
gem 'rails-flog', :require => 'flog'
Redmine でのスクリーンショットはこんな感じ。
使用前
使用後
Railsアプリケーションに tmp/no-flog.txt
を配置すれば一時的に整形をやめることもできます。
残念なところ
作った経緯
- 先日、西脇.rb & 東灘.rb 合同もくもく会 7th - 西脇.rb & 東灘.rb に参加した時に、@jnchito さんが、色々と awesome_print で出力するWebサービスを作成されてて、その際にログに出力される複雑なパラメータを手作業で整形するのがタルいみたいな事をおっしゃってまして、「あるある」と思っていた。
- んで、複雑なSQLもタルいよなー、整形してログに出力させるぐらいならできんじゃね?
- anbt-sql-formatter てのがあるじゃない。イケそう。
- 誰か作ってんじゃない?と調べてみると Railsのログに出力されるパラメータやSQLを整形する - ( ꒪⌓꒪) ゆるよろ日記 というそのものなものが見つかる。しかも自分でブクマ済み。
- もう少し調べてみるとどうやら同等の機能をもつ gem は存在していないみたい。
- 作ってみるか。
思うところ
我々エンジニアは誰しも素晴らしいプロダクトやサービスを作りたいと思っていると思います。
そして多くの人が時間、技術力、アイデア、ビジョン等々の不足であきらめているのでしょう。
でもエンジニアの本質は「素晴らしい物を生み出す」よりも、「一歩進める」ことだと思っています。
ひとが考えもしない方向へ一歩進められたり、一歩がとっても大きい人が素晴らしいプロダクトやサービスを生み出せるのでしょう。
出来なかったことをできるようにしたり、自動化したり、簡略化したり、みんな一歩進めた結果です。
rails-flog
も、アイデアも実装手段も他の巨人に乗っかったものですが、gemにするという一歩だけ進めることが出来ました。
一歩進めるだけなら誰にでもできるでしょう、さああなたも身近なものを一歩進めてみてください。
Next
明日は znz さんです。
2013/11/28
Coverallsで特定のファイルのみ集計対象にする
なにか作って Github に置く場合、基本的に Travis と Coveralls を利用している。
Coveralls を利用するのは簡単で、基本的には下記の手順で問題ない。
- coveralls の gem をインストールする
- .coveralls.yml を作成
- spec_helper などの最初に
require "coveralls"
してCoveralls.wear!
する - push する
とはいえ、これだとテストでロードされた全てのファイルが対象になってしまう。
全てのファイルが対象になるとスペックファイルの fail
とか、lib に突っ込んだ外部ライブラリとかも対象になってしまい、永久に 100% にならない。
それは困るので調べてみたら、ちゃんと公式に書いてあった。
なるほど、フォーマッタだけ Coveralls のを使用すればいいのね。
ちょっと、個人的に直感的じゃないなと思うのは、add_filter
の引数がパスに含まれているファイルやブロックにて true を返すファイルを除外するというところ。
フィルタなんだから、マッチするものだけを対象にするかと思ったら逆なんだな。
2013/11/23
Redmine のプラグインを Travis で CI してみた
Redmine のプラグインの場合、プラグイン本体のみ Github に登録しているので、そのままでは Travis で CI することができない。
諦めていたんだけど、.travis.yml のオプションとにらめっこしたらなんとなく出来そうな気がしたので試してみた。
10数回の試行を経て、なんとか出来たのでスクリプトを紹介します。
.travis.yml
before_install
があるので、after_install
があるかと思ったらなかった。before_install.sh
gem インストール前に実行させるスクリプト。
Travis ではbundle install
前に直下のGemfile
がBUNDLE_GEMFILE
環境変数に登録されてしまう。
しかし、指定したいのはプラグインのGemfile
ではなく、Redmine のものなのである。
なので、mv
しまくりでなんとかディレクトリ構成を整えた。苦労した。
Redmine のダウンロード URL がバージョンだけに依存してくれないのが少し残念。exec_test.sh
テスト実行用スクリプト。
前述のとおりafter_install
がなかったので、bundle install
後の処理(Redmineの初期化など)とテストの実行を同時にすることにした。
こちらはそんなに苦労しなかった。
これで、プラグインを複数バージョンの Ruby でテストすることができるようになった。
でも、複数バージョンの Redmine でテストすることは当然できない。
複数バージョンの Redmine を対象にテストするなら Jenkins 使うのがいいんだろうな。
2013/11/06
OS X Mavericks にすると gcc-4.2 がなくなるらしい
bundle install
したらエラーになった。
pinzolo@ileach [master] % bundle install --path vendor/bundle
Fetching gem metadata from https://rubygems.org/.........
Fetching gem metadata>from https://rubygems.org/..
Resolving dependencies...
Using rake (10.1.0)
Using i18n (0.6.5)
Using minitest (4.7.5)
Using multi_json (1.8.2)
Installing atomic (1.1.14)
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/Users/pinzolo/.rbenv/versions/2.0.0-p195/bin/ruby extconf.rb
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/Users/pinzolo/.rbenv/versions/2.0.0-p195/bin/ruby
--with-atomic_reference-dir
--without-atomic_reference-dir
--with-atomic_reference-include
--without-atomic_reference-include=${atomic_reference-dir}/include
--with-atomic_reference-lib
--without-atomic_reference-lib=${atomic_reference-dir}/
/Users/pinzolo/.rbenv/versions/2.0.0-p195/lib/ruby/2.0.0/mkmf.rb:431:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
from /Users/pinzolo/.rbenv/versions/2.0.0-p195/lib/ruby/2.0.0/mkmf.rb:516:in `try_link0'
from /Users/pinzolo/.rbenv/versions/2.0.0-p195/lib/ruby/2.0.0/mkmf.rb:814:in `try_run'
from extconf.rb:26:in `'
Gem files will remain installed in /Users/pinzolo/projects/detox/vendor/bundle/ruby/2.0.0/gems/atomic-1.1.14 for inspection.
Results logged to /Users/pinzolo/projects/detox/vendor/bundle/ruby/2.0.0/gems/atomic-1.1.14/ext/gem_make.out
An error occurred while installing atomic (1.1.14), and Bundler cannot continue.
Make sure that `gem install atomic -v '1.1.14'` succeeds before bundling.
mkmf.log
見ろって言われたので見てみる。
pinzolo@ileach [master] % cat vendor/bundle/ruby/2.0.0/gems/atomic-1.1.14/ext/mkmf.log
"gcc-4.2 -o conftest -I/Users/pinzolo/.rbenv/versions/2.0.0-p195/include/ruby-2.0.0/x86_64-darwin12.4.0 -I/Users/pinzolo/.rbenv/versions/2.0.0-p195/include/ruby-2.0.0/ruby/backward -I/Users/pinzolo/.rbenv/versions/2.0.0-p195/include/ruby-2.0.0 -I. -I'/Users/pinzolo/.rbenv/versions/2.0.0-p195/include' -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -Wno-error=shorten-64-to-32 -fno-common -pipe conftest.c -L. -L/Users/pinzolo/.rbenv/versions/2.0.0-p195/lib -L. -L'/Users/pinzolo/.rbenv/versions/2.0.0-p195/lib' -lruby.2.0.0 -lpthread -ldl -lobjc "
sh: gcc-4.2: command not found
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: int main(int argc, char **argv)
4: {
5: return 0;
6: }
/* end */
gcc-4.2
がないらしい。
どうやら Mavericks にしたら、gcc-4.2
がgcc
になるらしい。
sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2
したら、解決した。
2013/09/08
RedmineのプラグインをRSpecでテストする
Redmineは基本的にはxUnitなコードでテストが書かれています。
今のところ例に習いxUnit形式でテスト書いていたんだけど、RSpecで書きたいなという欲求は当然あるわけです。
なので今回RSpecを導入してみた。
まずは、$REDMINE/plugins/<plugin_name>/Gemfile
を作成して、bundle install
# Gemfile
group :development, :test do
gem "rspec-rails", ">= 2.8.1"
end
$REDMINE/plugins/<plugin_name>/spec/spec_helper.rb
を作成し、設定を記述。
require File.expand_path(File.dirname(__FILE__) + '/../../../spec/spec_helper')
RSpec.configure do |config|
config.mock_with :mocha
config.fixture_path = "#{::Rails.root}/test/fixtures"
end
各種specファイルの冒頭で spec_helper
をrequireする。
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
# require 'spec_helper' ではダメだった。
基本的にはこれで設定はいいはずだけど、なぜかspecタスクで実行できない。
実行できないというよりspecファイルが見つけられないらしい。
rspec コマンドを指定しても不可能。
ベースディレクトリを指定してやれば実行できた。
$ bundle exec rake spec # ダメ
$ bundle exec rspec # これもダメ
$ bundle exec rake spec plugins/<plugin_name>/spec # これでもダメ
$ bundle exec rspec plugins/<plugin_name>/spec # これはOK
2013/08/20
[#nshgrb]西脇.rb & 東灘.rb もくもく会 6th と Kobe Rubyist Meetup に参加してきました
8/17に西脇.rb & 東灘.rb もくもく会 6th と Kobe Rubyist Meetup に続けて参加してきました。
いつも Kyoto.rb に参加してくださってる @spring_aki さんから、宣伝があったのと、SonicGarden の人が来るというのと、コードレビューつきもくもく会に興味があったので、新快速で一時間ほど揺られて行ってきました。
作ったもの
redmine_yare という簡単な Redmine のプラグインを作りました。
最近プライベートで Redmine のプラグインを作っているので、勉強がてらということととりあえず今回はもくもく会の中で完結するものを作りたかったので、シンプルなものにした。
画面遷移する度に今日が期限のチケットをダイアログ表示する非常に迷惑なプラグインです。
苦労したところ
フックのロジックとビューを分離するところが苦労した。
コレについてのまとめは後日に別エントリであげます。
もくもく会の感想
意外と3時間というのは短くて思ったより実装が進まなかった。調査に時間がかかったというのもあるけれど。結構時間を無駄に使っていたと思う。その都度しっかり意思決定していればもっと効率的な進め方が出来たと思う。
コードレビューでは、自分のコードはコード量自体が少なくてあまり突っ込まれなかった。(スペルミスしたけど)
気になったのは、レビューイと限られた人がメインでしゃべっている感じだったので、もっと全員でコードレビューしている感じがでるといいなと思う。(一人15分だし、スキルや経験の差があるのでしかたのないこととは思うが)
Meetup
懇親会はやっているけど、規模を拡大して Meetup は初の試みだったそうだ。
やっぱり酒が入って話しやすくなってくると濃い話が自然発生するのが楽しい。
正規表現の話や、Railsのコントリビュータの体験談などの話を酒を聞けるのは貴重な機会だった。
今後
特性上、大人数で行えないタイプの勉強会なので毎回参加というのは難しいとは思うが、また参加したいなと思う。
今回の ProMotion のお話のように、他者に新しい体験を提供できるようなネタがあればいいんだけど、しばらくは難しいかもな。Redmine のプラグインを頑張らねば。
西脇.rb と東灘.rb の皆様お疲れ様でした。
2013/08/01
Redmine plugin にて自動ロード対象のディレクトリを追加するには
どうやら Redmine はプラグインの lib は自動的にロードパスに登録するが、app 以下は controllers, models, helpers のみを autoload の対象にするようだ。
lib/redmine/plugin.rb にこんな記述があった。
2013/07/28
Redmine plugin 開発時の fixture
Redmine のプラグインのユニットテストのために、fixture を追加した。
$REDMINE/plugins/my_plugin/test/fixtures/my_models.yml
という形でテストデータを追加し、bundle exec rake redmine:plugins:test RAILS_ENV=test
を実行したらエラーになった。
Errno::ENOENT: No such file or directory - /Users/pinzolo/projects/my_plugin/redmine-2.3.1/test/fixtures/my_models.yml
つまり、プラグインのtest/fixtures
ディレクトリを見ていないということみたいだ。
プラグインの test/fixtures
を見るように設定するなら、$REDMINE/plugins/my_plugin/test/test_helper.rb
に下記を追加すればいいんだけど、こうすると $REDMINE/test/fixtures
を見てくれなくなる。
fixture_path
が配列でもよしなにやってくれるようにパッチを当てたいところだが、fixture_path
が結構ダイレクトに使われているので大変そうなのと、プラグイン側がやることでもなかろうということで、仕方なく $REDMINE/test/fixtures
にコピーする。
fixture を作ったり更新したりする度にコピーするのはめんどいな。
2013/07/26
RAILS_ENV=test な rails console を実行するには
bundle exec rails console RAILS_ENV=test
とするとエラーになった。どうやら
bundle exec rails console test
とする必要があるらしい。ちなみに、RAILS_ENV=test な rails console では、SQL のログが出力されて便利ですよ。
pinzolo@ileach % bundle exec rails console test
*** Mocha deprecation warning: Change `require 'mocha'` to `require 'mocha/setup'`.
Loading test environment (Rails 3.2.13)
irb(main):001:0> Project.all.first
Project Load (0.2ms) SELECT "projects".* FROM "projects"
=> #<Project id: 1, name: "eCookbook", description: "Recipes management application", homepage: "http://ecookbook.somenet.foo/", is_public: true, parent_id: nil, created_on: "2006-07-19 17:13:59", updated_on: "2006-07-19 20:53:01", identifier: "ecookbook", status: 1, lft: 1, rgt: 10, inherit_members: false>
2013/07/22
特定のモジュールがextendされているかを調べる
調べてみたところ、一手間かけたら取得することができるみたいだ。
2013/07/20
done homework of Kyoto.rb
kyotorb/2013-07-18_TDDBC at master · pinzolo/kyotorb
ステップ5は出力だけの話なのでステップ4まででいーや。(投げやり)
英語がかなり微妙、そして RSpec の describe や context の扱いも慣れていないのでブレまくり。
2013/07/17
椅子代わりにバランスボールを導入してみた
近場のオフィス用品中古店を見て回り、45kでアーロンチェアが売っていたり、16kのオカムラのFeegoもいいなと思っていた。
しかしまあ思いつきで、バランスボールによる体幹トレーニングができるなら、それでいいかなと。安いし。
ヨドバシで1kちょいなんで、失敗しても諦めつくし。高い椅子はそれから買えばいいし。
というわけで、バランスボールを椅子代わりに我が家に導入しました。
子供が出来たら安全面を考える必要があるかもしれないけど、しばらく試してみます。
願わくば、体にいい傾向が出ますように。
java -jar にて実行可能な jar ファイルを作成するための pom.xml 設定
classpathPrefix でクラスパスを通すディレクトリを指定できるのはかなり便利だと思う。
2013/07/08
github のリポジトリを remote add して push したらエラーが出た
git push したらこんなエラーが出た。
% git push origin master
To git@github.com:pinzolo/repo.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:pinzolo/repo.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
いつも下記の手順で github と連携していたから、特に困ったことはなかった。
- github にリポジトリを作成する
- ローカルに clone する
- 開発する
しかし今回は
- ローカルで
git init
する - github リポジトリを作成
- ローカルに対して
git add origin git@github.com:pinzolo/repo.git
- 冒頭のエラー
というわけだ。
github でリポジトリを作成した時に README.md を作成したから、そっちの情報がなかったわけね。
というわけで、一旦 git pull
してから git push
したらエラーは出なくなった。なるほど
2013/07/04
startup_redmine_plugin_development.sh
自動で行なってくれる作業は
- 専用ディレクトリの作成
- 最新のRedmineを取得
- Redmineをローカルにデプロイ
- database.ymlを作成
- gemのインストール
- トークンの作成
- マイグレーションの実行
- デフォルトデータのロード(デフォルトは日本語)
- プラグインの雛形を生成
- gitにて初回コミット
2013/06/22
Redmine プラグインのテストが実行できるまで
環境はこちら。
- Ruby 2.0.0-p195(use rbenv)
- Redmine 2.3.1
- Mac OS X 10.8.4
まずは、公式を参考に実行。
% bundle exec rake test:engines:all
rake aborted!
Don't know how to build task 'test:engines:all'
...
タスクが存在していないみたいなので、テストに関連しそうなタスクの一覧を確認。
% bundle exec rake -T | grep test
rake ci # Run the Continous Integration tests for Redmine
rake extract_fixtures # Create YAML test fixtures from data in an existing database.
rake redmine:email:test[login] # Send a test email to the user with the provided login name
rake redmine:plugins:test # Runs the plugins tests.
rake redmine:plugins:test:functionals # Run tests for {:functionals=>"db:test:prepare"}
rake redmine:plugins:test:integration # Run tests for {:integration=>"db:test:prepare"}
rake redmine:plugins:test:units # Run tests for {:units=>"db:test:prepare"}
rake test # Runs test:units, test:functionals, test:integration together (also available: test:benchmark, test:profile, test:plugins)
rake test:coverage # Measures test coverage
rake test:rdm_routing # Run tests for rdm_routing / Run the routing tests
rake test:recent # Run tests for {:recent=>"test:prepare"} / Test recent changes
rake test:scm # Run unit and functional scm tests
rake test:scm:functionals # Run tests for {:functionals=>"db:test:prepare"} / Run the scm functional tests
rake test:scm:setup:all # Creates all test repositories
rake test:scm:setup:bazaar # Creates a test bazaar repository
rake test:scm:setup:create_dir # Creates directory for test repositories
rake test:scm:setup:cvs # Creates a test cvs repository
rake test:scm:setup:darcs # Creates a test darcs repository
rake test:scm:setup:filesystem # Creates a test filesystem repository
rake test:scm:setup:git # Creates a test git repository
rake test:scm:setup:mercurial # Creates a test mercurial repository
rake test:scm:setup:subversion # Creates a test subversion repository
rake test:scm:units # Run tests for {:units=>"db:test:prepare"} / Run the scm unit tests
rake test:scm:update # Updates installed test repositories
rake test:single # Run tests for {:single=>"test:prepare"}
rake test:ui # Run tests for {:ui=>"db:test:prepare"} / Run the UI tests with Capybara (PhantomJS listening on port 4444 is required)
rake test:uncommitted # Run tests for {:uncommitted=>"test:prepare"} / Test changes since last checkin (only Subversion and Git)
どうやら、rake redmine:plugins:test{functionals,integration,units}あたりでテストが出来そう。
% bundle exec rake redmine:plugins:test
rake aborted!
undefined method `[]' for nil:NilClass
…
Tasks: TOP => db:test:load => db:test:purge
RAILS_ENV=test を忘れていた。
% bundle exec rake redmine:plugins:test RAILS_ENV=test
*** Mocha deprecation warning: Change `require 'mocha'` to `require 'mocha/setup'`.
rake aborted!
database configuration does not specify adapter
…
Tasks: TOP => redmine:plugins:test:units => db:test:prepare => db:abort_if_pending_migrations => environment
テスト用のデータベースの設定がしてない。 config/database.yml を編集して・・・
# config/databse.yml
development:
adapter: sqlite3
database: db/redmine.db
# ここから追加
test:
adapter: sqlite3
database: db/redmine_test.db
再度実行。
% bundle exec rake redmine:plugins:test RAILS_ENV=test
*** Mocha deprecation warning: Change `require 'mocha'` to `require 'mocha/setup'`.
You have 221 pending migrations:
1 Setup
2 IssueMove
3 IssueAddNote
4 ExportPdf
…
Run `rake db:migrate` to update your database then try again.
マイグレーションができていないのね。
% bundle exec rake db:migrate RAILS_ENV=test
== Setup: migrating ==========================================================
-- create_table("attachments", {:force=>true})
-> 0.0039s
-- create_table("auth_sources", {:force=>true})
-> 0.0011s
-- create_table("custom_fields", {:force=>true})
-> 0.0008s
-- create_table("custom_fields_projects", {:id=>false, :force=>true})
-> 0.0004s
-- create_table("custom_fields_trackers", {:id=>false, :force=>true})
-> 0.0413s
-- create_table("custom_values", {:force=>true})
-> 0.0011s
-- create_table("documents", {:force=>true})
-> 0.0008s
-- add_index("documents", ["project_id"], {:name=>"documents_project_id"})
-> 0.0003s
-- create_table("enumerations", {:force=>true})
-> 0.0005s
-- create_table("issue_categories", {:force=>true})
-> 0.0005s
-- add_index("issue_categories", ["project_id"], {:name=>"issue_categories_project_id"})
-> 0.0002s
-- create_table("issue_histories", {:force=>true})
-> 0.0007s
-- add_index("issue_histories", ["issue_id"], {:name=>"issue_histories_issue_id"})
-> 0.0002s
-- create_table("issue_statuses", {:force=>true})
-> 0.0006s
-- create_table("issues", {:force=>true})
-> 0.0011s
-- add_index("issues", ["project_id"], {:name=>"issues_project_id"})
-> 0.0002s
-- create_table("members", {:force=>true})
-> 0.0006s
-- create_table("news", {:force=>true})
-> 0.0007s
-- add_index("news", ["project_id"], {:name=>"news_project_id"})
-> 0.0002s
-- create_table("permissions", {:force=>true})
-> 0.0007s
-- create_table("permissions_roles", {:id=>false, :force=>true})
-> 0.0004s
-- add_index("permissions_roles", ["role_id"], {:name=>"permissions_roles_role_id"})
-> 0.0002s
-- create_table("projects", {:force=>true})
-> 0.0008s
-- create_table("roles", {:force=>true})
-> 0.0004s
-- create_table("tokens", {:force=>true})
-> 0.0006s
-- create_table("trackers", {:force=>true})
-> 0.0005s
-- create_table("users", {:force=>true})
-> 0.0009s
-- create_table("versions", {:force=>true})
-> 0.0007s
-- add_index("versions", ["project_id"], {:name=>"versions_project_id"})
-> 0.0002s
-- create_table("workflows", {:force=>true})
-> 0.0006s
== Setup: migrated (0.1067s) =================================================
…
== RemoveIssuesDefaultFkValues: migrating ====================================
-- change_column_default(:issues, :tracker_id, nil)
-> 0.0257s
-- change_column_default(:issues, :project_id, nil)
-> 0.0737s
-- change_column_default(:issues, :status_id, nil)
-> 0.0252s
-- change_column_default(:issues, :assigned_to_id, nil)
-> 0.0236s
-- change_column_default(:issues, :priority_id, nil)
-> 0.0245s
-- change_column_default(:issues, :author_id, nil)
-> 0.0251s
== RemoveIssuesDefaultFkValues: migrated (0.1981s) ===========================
% bundle exec rake redmine:load_default_data RAILS_ENV=test
Select language: ar, az, bg, bs, ca, cs, da, de, el, en, en-GB, es, et, eu, fa, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mk, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sq, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en] ja
====================================
Default configuration data loaded.
もう一度実行。
% bundle exec rake redmine:plugins:test RAILS_ENV=test
*** Mocha deprecation warning: Change `require 'mocha'` to `require 'mocha/setup'`.
/Users/pinzolo/.rbenv/versions/2.0.0-p195/bin/ruby -I"lib:test" -I"/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib" "/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib/rake/rake_test_loader.rb" "plugins/*/test/unit/**/*_test.rb"
*** Mocha deprecation warning: Change `require 'mocha'` to `require 'mocha/setup'`.
/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/lib/SVG/Graph/Graph.rb:3: warning: class variable access from toplevel
Run options:
# Running tests:
Finished tests in 0.067877s, 132.5928 tests/s, 132.5928 assertions/s.
9 tests, 9 assertions, 0 failures, 0 errors, 0 skips
ruby -v: ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.4.0]
/Users/pinzolo/.rbenv/versions/2.0.0-p195/bin/ruby -I"lib:test" -I"/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib" "/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib/rake/rake_test_loader.rb" "plugins/*/test/functional/**/*_test.rb"
*** Mocha deprecation warning: Change `require 'mocha'` to `require 'mocha/setup'`.
/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/lib/SVG/Graph/Graph.rb:3: warning: class variable access from toplevel
Run options:
# Running tests:
Finished tests in 0.062297s, 16.0521 tests/s, 16.0521 assertions/s.
1 tests, 1 assertions, 0 failures, 0 errors, 0 skips
ruby -v: ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.4.0]
/Users/pinzolo/.rbenv/versions/2.0.0-p195/bin/ruby -I"lib:test" -I"/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib" "/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib/rake/rake_test_loader.rb" "plugins/*/test/integration/**/*_test.rb"
成功したみたいなので、失敗させてみる。
# sample_model_test.rb
require File.expand_path('../../test_helper', __FILE__)
class SampleModelTest < ActiveSupport::TestCase
# Replace this with your real tests.
def test_truth
#assert true
assert false
end
end
% bundle exec rake redmine:plugins:test:units RAILS_ENV=test
berk redmine:plugins:test:units RAILS_ENV=test
(in /Users/pinzolo/projects/sample_plugin/redmine-2.3.1)
*** Mocha deprecation warning: Change `require 'mocha'` to `require 'mocha/setup'`.
/Users/pinzolo/.rbenv/versions/2.0.0-p195/bin/ruby -I"lib:test" -I"/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib" "/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib/rake/rake_test_loader.rb" "plugins/*/test/unit/**/*_test.rb"
*** Mocha deprecation warning: Change `require 'mocha'` to `require 'mocha/setup'`.
/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/lib/SVG/Graph/Graph.rb:3: warning: class variable access from toplevel
Run options:
# Running tests:
[1/9] SampleModelTest#test_truth = 0.00 s
1) Failure:
test_truth(SampleModelTest) [/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/plugins/sample_plugin/test/unit/sample_model_test.rb:8]:
Failed assertion, no message given.
Finished tests in 0.069086s, 130.2724 tests/s, 130.2724 assertions/s.
9 tests, 9 assertions, 1 failures, 0 errors, 0 skips
ruby -v: ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.4.0]
rake aborted!
Command failed with status (1): [ruby -I"lib:test" -I"/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib" "/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib/rake/rake_test_loader.rb" "plugins/*/test/unit/**/*_test.rb" ]
…
Tasks: TOP => redmine:plugins:test:units
予定通り失敗した。
あとはテストを書いて実行していけばよさそうだ
Ruby2.0.0をインストール
Ruby 2.0 がリリースされてしばらくしたのでそろそろ入れることにした。
% rbenv install 2.0.0-p195
Downloading ruby-2.0.0-p195.tar.gz...
-> http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p195.tar.gz
Installing ruby-2.0.0-p195...
BUILD FAILED
Inspect or clean up the working tree at /var/folders/1j/hw72brh57jv94vdl9567fr140000gn/T/ruby-build.20130621233411.34289
Results logged to /var/folders/1j/hw72brh57jv94vdl9567fr140000gn/T/ruby-build.20130621233411.34289.log
Last 10 log lines:
make[2]: *** [readline.o] Error 1
make[1]: *** [ext/readline/all] Error 2
make[1]: *** Waiting for unfinished jobs....
compiling ../.././ext/psych/yaml/reader.c
compiling ../.././ext/psych/yaml/scanner.c
compiling ../.././ext/psych/yaml/writer.c
installing default psych libraries
linking shared-object psych.bundle
ld: warning: directory not found for option '-L/Users/pinzolo/.rbenv/versions/2.0.0-p195/lib'
make: *** [build-ext] Error 2
なんか失敗した。
こちらを参考に再度挑戦。
readline は入っていたので openssl を入れて、`RUBY_CONFIGURE_OPTS`を指定してインストール。
% brew update
% brew install openssl
% brew link openssl --force
% brew install curl-ca-bundle
% brew list curl-ca-bundle
/usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt
% cp /usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt /usr/local/etc/openssl/cert.pem
% RUBY_CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl` --with-readline-dir=`brew --prefix readline` --enable-shared" rbenv install 2.0.0-p195
Downloading ruby-2.0.0-p195.tar.gz...
-> http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p195.tar.gz
Installing ruby-2.0.0-p195...
Installed ruby-2.0.0-p195 to /Users/pinzolo/.rbenv/versions/2.0.0-p195
いけたみたいなので確認。
% ruby -v
ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.4.0]
bundler は入れておかないと。
% gem install bundler
Fetching: bundler-1.3.5.gem (100%)
Successfully installed bundler-1.3.5
1 gem installed
バッチリ!お疲れ様でした。
2013/06/20
Redmine から Google Apps のメールを送信する
一人しか使ってないプライベートの Redmine ですが、メール設定しておくのを忘れていたので、メール設定を行った。
GMail の設定は過去に行ったが Google Apps の設定は初めてなのでメモ。
ちなみに環境は Redmine 2.3.1 on Ruby 1.9.3。
とはいっても、Google Apps のメールとはいってもほぼ GMail と同じ。
$REDMINE_HOME/config/configuration.ymlに下記の設定をするだけ。
変更したのは domain を Google Apps で使用しているドメインに設定した。それだけ。
production: email_delivery: delivery_method: :smtp smtp_settings: enable_starttls_auto: true address: "smtp.gmail.com" port: 587 domain: "mkt-sys.jp" authentication: :login user_name: "hogefuga@mkt-sys.jp" password: "foobarbaz"
2013/06/08
さくらVPSのRedmineを2.0.0から2.3.1にアップデート
やったことはtail -f pinzo.log: Redmine を 1.4.1 から 2.0.0 にアップデートしたの焼き直し。
あと、「Plugin assetsディレクトリに書き込み可能」にビックリマークが出ていたので、解消しておいた。
$REDMINE_HOME/public/plugin_assetsディレクトリを作成して、www-dataにchownしただけ。
2013/06/06
Kyoto.rbに行ってきた
登録はしたものの、引越しとかなんとかで一度も行っていなかったKyoto.rbに初参加してきた。
とはいえ、途中から参加のため自己紹介して軽く発言した程度。
ていうかスーツが俺だけ!?っていうのが驚いた。
引越しとか関西での仕事探しとかですっかりプライベートでの開発熱が下がっていたけど、久しぶりに技術者の集いに参加できたおかげで少しテンションが上がった。
やっぱりモノ作らんといかんよな。
次回の Kyoto.rb は6/20。また参加します。
2013/01/24
macにtreeコマンドをインストール
ディレクトリ階層を確認するために便利な tree コマンドを Mac で使用したい。
というわけで Homebrew でさくっとインストール。
% brew install tree
==> Downloading http://mama.indstate.edu/users/ice/tree/src/tree-1.6.0.tgz
######################################################################## 100.0%
==> make prefix=/usr/local/Cellar/tree/1.6.0 MANDIR=/usr/local/Cellar/tree/1.6.0/share/man/man1 CC=cc CFLAGS=-fomit-frame-pointer LDFLAGS= OBJS=tree.o unix.o html.o xml.o hash.o color.o strverscmp.o install
/usr/local/Cellar/tree/1.6.0: 7 files, 120K, built in 4 seconds
簡単です。
使用も簡単です。
% tree
.
├── dir1
│ └── file1-1.txt
├── dir2
│ ├── dir3
│ │ └── file3-1.txt
│ ├── file2-1.txt
│ └── file2-2.txt
└── file1.txt
3 directories, 5 files
ディレクトリ指定。
% tree dir2
dir2
├── dir3
│ └── file3-1.txt
├── file2-1.txt
└── file2-2.txt
1 directory, 3 files
ディレクトリ表示のみ。
% tree -d
.
├── dir1
└── dir2
└── dir3
3 directories
全ファイル表示。
% tree -a
.
├── .dotdir
│ └── .dotfile2
├── .dotfile
├── dir1
│ └── file1-1.txt
├── dir2
│ ├── dir3
│ │ └── file3-1.txt
│ ├── file2-1.txt
│ └── file2-2.txt
└── file1.txt
4 directories, 7 files