pinzolo/rails-flog の Rails4.2でのテストが落ちてて、でも動いてるしーで放置してしまってた。
んで、ちゃんとしないとと思って調べてみたら、テストを壊していたのはテストコード(と自分の思い込み)だった。
具体的には mocha というモックライブラリを使用していたんだけど、スタブ作ったらテストケースをまたいで存在し続けるのを、テストケースセーフだと思い込んでいた。以前のバージョンではシーケンシャルにテストが行われていたけど、ランダムになったのでテストが落ちるようになった。
どうりでローカルでテストすると時々によってエラーの数が違うわけだ。
んで、minitest にもモック・スタブ機能があることを知り、ブロックでの影響範囲を限定できるのでこっちのほうがいいじゃん!!と mocha を削除し minitest のスタブに統一した。
ここまで前置き
ローカルでテスト通ったーと喜んで push すると travis でコケる。
Ruby1.9&Rails3.2ではstubなんてないよと怒られ、Ruby2.2&Rails3.2では 'minitest/autorun'がないと怒られた。
Ruby1.9に同梱されている minitest には minitest/mock がまだ存在していなかったらしい。
調べてみると明示的に最新の minitest を使うのが良いらしく、gemspec に足してみた。
するとこんどは Rails3.2で軒並みコケた。
警告も出てるし、いくつか試行錯誤してRails3.2では minitest のバージョンを 4.7.x となるように指定したら、今度はRuby2.2の時だけtest-unitが足りないと言われる。
そういや削除されたんだったっけ。
これでようやく全部通った。なまじ同梱されてるから環境の差分を調整するのはしんどい。
2015/11/16
2015/11/07
Rails3とRails4のhas_manyオプションの差分を吸収する
Rails3とRails4の違いの1つに
しかし、1つのソースでRails3とRails4に対応したい場合どうしようか? とまあこんな感じでどうでしょう?
has_many
のオプションがあります。
Rails4では order
と include
が使えなくなってるんですね。しかし、1つのソースでRails3とRails4に対応したい場合どうしようか? とまあこんな感じでどうでしょう?
投稿者
pinzolo
時刻:
12:39
1 件のコメント
:
http://pinzolog.blogspot.com/2015/11/has-many-options-rails3-and-rails4-compatible.htmlRails3とRails4のhas_manyオプションの差分を吸収する
ラベル:
rails
2015/11/06
本番環境での secret_key_base 設定
本番環境に Rails4.2.4 のアプリケーションをデプロイするとこんなエラーが出た。
でも、複数の Rails アプリを動かしているし、今後も増やすだろうからpassengerの運用ユーザーに対して設定する訳にはいかない。
App 21863 stderr: [ 2015-11-06 12:37:20.3972 21881/0x007f1632a022e8(Worker 1) utils.rb:84 ]: *** Exception RuntimeError in Rack application object (Missing `secret_token` and `secret_key_base` for 'production' environment, set these value s in `config/secrets.yml`) (process 21881, thread 0x007f1632a022e8(Worker 1)):
config/secrets.yml
によると、本番環境ではENV["SECRET_KEY_BASE"]
を読み込むらしい。でも、複数の Rails アプリを動かしているし、今後も増やすだろうからpassengerの運用ユーザーに対して設定する訳にはいかない。
ENV["FOO_SECRET_KEY_BASE"]
のようにアプリごとに環境変数変えたらいいのかな?とおもって調べてみると、apacheの設定ファイルで SetEnv すればよいらしい。
# /etc/apache2/sites-available/foo-app.conf <VirtualHost *:80> ServerName foo-app.mkt-sys.jp:80 DocumentRoot /var/lib/rails/foo-app/public <Directory /var/lib/rails/foo-app/public/> SetEnv SECRET_KEY_BASE abcdefg...xyz #←ココ Options FollowSymLinks AllowOverride None Require all granted </Directory> PassengerEnabled on </VirtualHost>設定するキーは
bunde exec rake secret RAILS_ENV=production
で出力されたものをコピペ。(多分 RAILS_ENV=production
はいらないだろうけど)
登録:
投稿
(
Atom
)