質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

Q&A

解決済

1回答

2181閲覧

StringIOを使ったところ、permission denied される

anza

総合スコア23

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

1グッド

0クリップ

投稿2018/10/01 14:58

前提・実現したいこと

cookieをDBに保存するために、cookieをYAML文字列にしたい。

rubyでTwitterのスクレイピングシステムを作っています。
cookieを保存機能実装中に、StringIOが使えなくなりました。。。Permission deniedされます。(実装当初は使えていたような気がするのですが、、、)

https://qiita.com/riocampos/items/ae550ccfa1f9e0bf214dを参考にしました。

発生している問題・エラーメッセージ

ruby

1 def cookies_to_yaml_string 2 cookies_io_write = StringIO.new("", 'r+') 3 @agent.cookie_jar.save(cookåies_io_write, {:session => true}) 4 cookies_io_write.string 5 end

上記の1行目で下記のエラーが発生しています。

twitter_analytics_client.rb:58:in `initialize': Permission denied (Errno::EACCES) from /Users/anzaiyuusuke/Desktop/rails/twitter-analytics-acquirer/twitter_analytics_client.rb:58:in `new' from /Users/anzaiyuusuke/Desktop/rails/twitter-analytics-acquirer/twitter_analytics_client.rb:58:in `cookies_to_yaml_string' from /Users/anzaiyuusuke/Desktop/rails/twitter-analytics-acquirer/twitter_analytics_client.rb:66:in `save_cookies' from /Users/anzaiyuusuke/Desktop/rails/twitter-analytics-acquirer/twitter_analytics_client.rb:28:in `get_analytics_data_with_login' from script.rb:12:in `block in <main>' from script.rb:9:in `each' from script.rb:9:in `<main>'

試したこと

原因がさっぱり思いつかないので、「""」や[''」の入れ替えをして見ましたが、効きませんでした。

どなたか仮説でもいいので、答えていただけると本当に助かります!
よろしくお願いします!

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

lang

1cookies_io_write = StringIO.new(+"", 'r+')

に書き換えるとどうでしょう

投稿2018/10/01 16:34

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

anza

2018/10/01 18:45

ありがとうございます! 動きました! 可能であれば、理由もしくは参考となる情報(公式ドキュメントなど)を教えていただきたいのですが、可能でしょうか?
asm

2018/10/01 22:58

原因はfrozen_string_literalです。 Ruby2.3以上に導入されたコレを付け加えたのか、Rubyのバージョンを変えたのかわかりませんが 結果として、""がfreezeされた文字列になり https://docs.ruby-lang.org/ja/latest/method/StringIO/s/new.html > [EXCEPTION] Errno::EACCES: > string がフリーズされていて、mode が書き込み可能に設定されている場合に発生します。 が発生します。
anza

2018/10/02 01:19

ありがとうございます! 理解しました!! わかりやすかったです!!
anza

2018/10/02 01:23

すいません、重ねての質問で申し訳ないのですが、 cookies_io_write = StringIO.new(+"", 'r+') の + をつけたことでどう変わったのですか? + は、freezeされたstringを変更可能にするのでしょうか?
anza

2018/10/02 01:23

調べてもよく出てこず。。。
anza

2018/10/02 01:30

ありがとうございます! 理解しました! とても助かりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問