gitが実行できなくなった
Sierraにアップデートしたら。
こんなエラー。
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
このサイトいわく、これを実行しろ!
$ xcode-select --install
というわけで実行したら直った。 ありがとうございました。
ハードディスク処分市
はいねもとです。
なんか、100GB〜200GBくらいのゴミみたいなのが溜まってきたので捨てることに。
ひさしぶりにあけてみました。
ヘッド。実はヘッドはすんごい強力な磁石で固定されてたりします。
なので、一見どうやって開けるかわからないけど、
ドライバとかで、ふんぬ!!!ってやると開きます。
んー、大学のときはよく記録密度の測定とかしておりました。
なつかしい。
奥が、SAS、手前がSATA。SASはディスクサイズ小さいなぁ。
容量も、これで、73GBだったかな?手前は、163GBくらい。手前のディスクには僕が写り込んでいますな。
これSAS。
基盤の密度もだいぶ違うので、撮影してたんだけど、間違って消しちゃったのかな。
スマホにないっす。残念。
ディスクの厚みも、SASのほうが厚い。ディスクのばたつきを抑えて、ヘッドとのクラッシュのリスクを減らすためなんだろうなー。
信頼性向上のための仕組みがたくさん入ってます。
すごいなー。
SQLite3の使い方メモ
はいねもとです。
いつも忘れるのでメモ、今回はSQLiteについて、御苑のTully's Coffeeからお届けします。
まずは、SQLite使ってて、補完使えない問題にぶちあたったので、その解消法。
SQLiteで補完が効かないYO !!
sqlite3でhistoryや補完が効かない - komagataのブログ
そのままのサイトがありました!
つまり、Android SDKをinstallしてる人は、そっちのsqlite3が使われちゃう、と。
記載の通り対応してみたけど、僕はこれやってもうまくいかず。
.bash_profileに下記を追記しました。
export PATH="/usr/local/Cellar/sqlite/3.14.2_1/bin:$PATH"
そしたら、rails に、readlineがない!!!!って怒られるようになって、
rails動かなくなっちゃった。(エラー内容は忘れました)
一旦、brew link でreadlineのsymbolic link作って、ruby再インストールで復活!!
$ brew link readline --force $ rbenv uninstall 2.3.0 $ rbenv install 2.3.0
これで、.bash_profileをロードすればおっけーなはず。(ちょっと前にやったから不安)
$ source ~/.bash_profile
SQLite本番
ここからやっとSQLiteの使い方。
DBの開き方
さてさて、ファイルを指定して開きます。
$ sqlite3 db/development.sqlite3 SQLite version 3.14.2 2016-09-12 18:50:49 Enter ".help" for usage hints. sqlite>
show database
> .database
見栄えよくする
> .header on > .mode column
show tables
> .tables sqlite> .tables table1 table2 table3 table4
select
> select * from hoge; id column1 column2 column3 -- -------- --------- --------- 1 aaaaaaa bbbbbb ccccccc 2 ddddddd eeeeee fffffff
insert
> insert into hoge (id, column1, column2, column3) values (3, "ggggg", "hhhhh", "iiiii");
一旦。
whenever gemでどう書くの?
はいねもとです。
cron管理に、whenever gemを使っています。
今回、下記設定をしようとして、謎挙動をしたので、とりあえずメモ。
- 2:00 - 23:30までは、30min毎に、task Aを実行する
まずは、バージョン。
- whenever (0.9.4)
- chronic (0.10.2)
Wheneverは導入が超簡単なcrontab管理ライブラリGemです![Rails4.2 x Ruby2.3] - 酒と泪とRubyとRailsと
上記記事を参考にして、schedule.rbにはこんな感じで記載してみました。
regular_sync_schedule = (2..23).map {|_| ["#{_}:00", "#{_}:30"] }.flatten every 1.day, at: regular_sync_schedule do runecho "bb" end
そして、実行!えいやー。
$ RAILS_ENV=development bundle exec whenever --update-crontab
cronの設定を確認。
$ crontab -l # Begin Whenever generated tasks for: /Users/nemoto_hideaki/work/PROJECT/testp/config/schedule.rb 0,30,0,30 14,15,16,17 * * * /bin/bash -l -c 'echo test1 '\''bb'\'' >> log/cron_log.log 2>&1' 0,30 6,7,8,9,10,11,12,13,18,19,20,21,22,23 * * * /bin/bash -l -c 'echo test1 '\''bb'\'' >> log/cron_log.log 2>&1' # End Whenever generated tasks for: /Users/nemoto_hideaki/work/PROJECT/testp/config/schedule.rb
ぬぬー???なんかおかしい・・・
みやすく揃えてみると・・・
[min] 0,30,0,30 0,30 [hour] 14,15,16,17 6,7,8,9,10,11,12,13,18,19,20,21,22,23 [others] * * * /bin/bash -l -c 'echo test1 '\''bb'\'' >> log/cron_log.log 2>&1' * * * /bin/bash -l -c 'echo test1 '\''bb'\'' >> log/cron_log.log 2>&1'
やっぱり色々おかしい・・・
仕方ないので、原因を追ってみる。
Wheneverを呼び出すと、わーーーー、っと流れに流れて、
Whenever::Output::Cron#initialize が呼ばれます。
その中で、先程記載した下記設定の、"at" の部分が解釈されるみたい。
regular_sync_schedule = (2..23).map {|_| ["#{_}:00", "#{_}:30"] }.flatten every 1.day, at: regular_sync_schedule do runecho "bb" end
実際のコードは下記。
def initialize(time = nil, task = nil, at = nil) @at_given = at @time = time @task = task @at = at.is_a?(String) ? (Chronic.parse(at) || 0) : (at || 0) end
んで、ここのどこでおかしくなってるかというと・・・
Chronic.parse(at)
これですこれ。
なんか、この人に、1:00 - 5:00のStringを渡すと、なぜか、PMに変換されちゃう。
$ irb irb(main):001:0> require 'chronic' => true irb(main):002:0> Chronic.parse("5:00") => 2016-09-24 17:00:00 +0900 irb(main):003:0> Chronic.parse("6:00") => 2016-09-24 06:00:00 +0900 irb(main):004:0> Chronic.parse("5:00 am") => 2016-09-24 05:00:00 +0900
ほら。最後に、amをくっつけたやつは大丈夫。
Chronic gemまで見てみる気力がなかったので、一旦下記の設定をして逃げるある。
regular_sync_schedule_am = (2..11).map {|_| ["#{_}:00 am", "#{_}:30 am"] }.flatten regular_sync_schedule_pm = (12..23).map {|_| ["#{_}:00 pm", "#{_}:30 pm"] }.flatten every 1.day, at: regular_sync_schedule_am do runecho1 "aa" end every 1.day, at: regular_sync_schedule_pm do runecho1 "aa" end
23:00とかにもpmってついちゃうけど、それは問題なく動くので気にしない。
最終こうなったよ。
0,30 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 * * * /bin/bash -l -c 'echo test1 '\''aa'\'' >> log/cron_log.log 2>&1'
ちゃんちゃん。
PHPのメモリ割り当てエラー
はいねもとです。
今回は、WordPressをいじっていて出たエラー。
バージョンは、こんなん。
エラーはこんなん。
PHP Fatal error: Allowed memory size of bytes exhausted (tried to allocate XX bytes) in $ROOTDIR/wp/wp-includes/wp-db.php
なんだろーなー、と色々検索して、下記設定値をあげてみたりするも解決せず。
- WP_MEMORY_LIMIT
- WP_MAX_MEMORY_LIMIT
php.iniの、memory_limitも、128MB -> 256MBにあげてみたけど解決せず。
なんやねん。と思いつつ調査。
最終、原因は、php-fpm.d/www.confの下記設定。
php_admin_value[memory_limit] = 128M
どうやら、php_admin_valueに、渡してる引数に対応するphpの設定項目を上書きしちゃうらしい。
つまり、これをfpm側に書いてると、php.iniでいくらmemory_limitを設定しても無駄。
なので、ここを256MBにして再起動したら直りましたとさ。
ちゃんちゃん。
awsのstub in rspec
はいねもとです。
こんな環境でSQSのテストをrspecで書いていてこまってたのでメモ。
こまったのは、
queue = sqs.create_queue(queue_name: "testq") sqs.send_message(queue_url: queue.queue_url, message_body: "testdeath")
こんなコードを書いてるところです。
外部への接続なので、当然、stubしてね、って怒られました。
そしてこんなstubを書きました。
stub_request( :post, "https://sqs.ap-northeast-1.amazonaws.com/" ).to_return(status: 200, body: ""), headers: {})
それで実行してみました。
TypeError: no implicit conversion of Array into String
ぬぐぐ・・・。配列を文字列に暗に変換しましたね!と。
そんなつもりはないのですが、どこかで変換したみたいです。
queue = sqs.create_queue(queue_name: "testq") sqs.send_message(queue_url: queue.queue_url, message_body: "testdeath")
send_messageの引数に、create_queueの返り値を渡しているので、そのあたりをあたってみました。
stub_request( :post, "https://sqs.ap-northeast-1.amazonaws.com/" ).to_return(status: 200, body: Aws::SQS::Types::CreateQueueResult.new(queue_url: "aaa"), headers: {})
変更したのは、returnで、Aws::SQS::Types::CreateQueueResultを作って渡してみたところ。
なぜかというと、下記を見ると、create_queueの戻りはこれ、って言ってるので。
Class: Aws::SQS::Client — AWS SDK for Ruby V2
でも、実行してみたら、
WebMock::Response::InvalidBody: must be one of: [Proc, IO, Pathname, String, Array]. 'Aws::SQS::Types::CreateQueueResult' given # ./spec/controllers/hogehoge_controller_spec.rb:204:in `block (4 levels) in <top (required)>'
どーん!returnに指定できるものは決まっているじゃないですが・・・
意気消沈の助。
先生にたくさん質問して得られた結果。
Client Response Stubs - AWS Developer Blog - Ruby
Stubbing All Clients The default config can be used to enable client stubbing globally. This can be very useful when writing tests to enable stubbing in your test helper once. # stub everything Aws.config[:stub_responses] = true
つまり、Aws.config[:stub_responses] = trueを設定すれば、AWSの接続は全部勝手にstubしてやるよ!
って太っ腹設定があるのねーーーー!!
ほっ。これで全部解決。
ということで、設定してみました。
before do Aws.config[:stub_responses] = true end
実行してみました。
ArgumentError: invalid endpoint, expected URI::HTTP, URI::HTTPS, or nil, got #<URI::Generic String>
はふ・・・もう少し・・・だといいな・・・
なんだろうねぇ・・・と思って、create_queueからの戻りを見てみると、
"String"
って。きっと内部的には、URI.parse(queue_url)的なことをされているのだと思いますが、
URIの文字列ではないので、URI::Generic Stringって言われちゃうんでしょうね・・・
さて、ここから再度先生に質問。
support response stubbing for all instances of a service client · Issue #187 · aws/aws-sdk-core-ruby · GitHub
Using Stubs for the AWS SDK for Ruby - DZone Cloud
Client Response Stubs - AWS Developer Blog - Ruby
この辺を参考にした結果。
before do Aws.config[:sqs] = { stub_responses: { create_queue: { queue_url: "http://test.com" } } } end
これ!これで無事通りました。
ちゃんと、create_queueのときに、queue.queue_urlに、"http://test.com"が入ってきます。
あー、長かった・・・腰が痛いです。
aws-sdk使っていて謎のエラー(region設定)
はい、ねもとです。
で、SQS使おうとして、謎のエラーにぶつかり続けたのでメモです。
現象:
- rake spec は問題ない
- rspec spec/controllers/hogehoge_controller.specするとエラーがでる
NoMethodError: undefined method `match' for nil:NilClass Did you mean? catch
検索してみると、
の中で、おじさんが、こんなことを言っていました。
つまり、region設定ちゃんとされてないと出るよ。
ほむほむ。
dotenv-rails gemが入っているので、.envで、SQS_REGIONを定義して、
プログラム上もそれを読んでるんですけども・・・
binding.pry 挿入して、デバッグしてみたけども・・・
[2] pry(#<QueueManagerService>)> ENV['SQS_REGION'] => nil
がっつりnil。
えー。rake spec するとちゃんと入ってる。
えー。なんでだろう・・・と散々悩むことロダンの如し。
shell再起動したら直りました。
あ、そういうこともあるのか・・・。というか、.env編集したら再起動しないといけないのかな・・・
軽く、ぐーぐる先生にたずねてみたけどそんなことも見つからず。
誰か教えてくださいm(__)m