LoginSignup
11
8

More than 5 years have passed since last update.

No such file or directory @ rb_sysopen -config/apns/server_certificates_sandbox.pem (Errno::ENOENT)

Posted at

エラー

rspecでテストを書いて、走らせようとしたとき(rspec ファイル名.rb)に以下のエラーが出て走らせることができなかった。

No such file or directory @ rb_sysopen -config/apns/server_certificates_sandbox.pem (Errno::ENOENT)

エラー原因

config/apns/server_certificates_sandbox.pemというファイルがない

そもそもどこで「ファイルが必要」とされ、apnsって何で、pemって何

そもそもどこで「ファイルが必要」とされているか
- config/initializers以下のapns.rb
- initializersはrails起動時に読み込まれるファイル
apns.rb中身

apns.rb
apns = []
Settings.apns.certificate_file_names.each do |certificate_file_name|
  apn = Houston::Client.production
  apn.certificate = File.read("config/apns/#{certificate_file_name}")
  apns << apn
end

APNS = apns

確かにconfig/apns/以下のファイルを読み込むようになってる...

じゃあapnsって何、.pemって何
Appleのプッシュ通知に使うための秘密鍵らしい

それがないって?!
Screen Shot 2016-08-05 at 07.55.26.png

確かにない。
requireファイルを指定しているファイルを覗いてみる
config/settings/development.local.ymlみてみる

config/settings/development.local.yml
apns:       
   certificate_file_names:      
      'dummy_for_test.pem'

あれ、server_certificates_sandbox.pemはrequireされてない。。?
あ、テスト実行してるから、config/settings/test.local.ymlに書かれてるんだった

config/settings/development.local.yml
apns:       
   certificate_file_names:      
      'server_certificates_sandbox.pem'

確かにserver_certificates_sandbox.pemが必要って言ってるのに、該当ファイルがなくてエラーが出ているだろうことが確認された。

必要とするコードがあるなら何故該当ファイルがなくなった(内輪事情)

元々server_certificates_sandbox.pemはあったらしいのだが、秘密鍵が描かれているので、githubにあげるのはマズイだろうということで、サーバーに置いておくことにしたらしい。

そのファイルだけをrailsプロジェクトから消して、しかしながら、そのファイルを必要とするコードは(本番環境ではサーバーに置くことにした鍵を使って)まだ使うため、残っていて、サーバーの秘密鍵を取れないlocal環境ではエラーが出た。

ということ。(スッキリ!)

解決方法

  1. touch config/apns/server_certificates_sandbox.pem ないって言われてるなら作っちゃえ (ただgitにコミットしない配慮必要)
  2. config/settings/test.local.ymlの'server_certificates_sandbox.pem'を消す そしたら読み込むべきファイルなし、ということになるので、エラーは出なくなる こちらはlocalファイルなので、(.gitignoreしている限り)毎回コミットするときにこのファイルはコミットしない、という配慮は必要なくなる
11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8