Ruby on Rails 「No such file or directory」にハマりました

Ruby on Rails

こんにちは。じじグラマーのカン太です。週末プログラマーをしています。

最近は生成AIを利用して開発しています。コードの中身はほぼわからなくても、AI様がおっしゃる通りにコピペしていけばそれなりのものができあがるようになってきました。便利な世の中ですね。ただ、AI様でもわからないようなエラーが出た場合が困りものです。自分で調べるのって、こんなにたいへんだったんだ、という体験をしたので、ここに備忘録としておいておきます。

発生したエラーの内容

public/uploads/xxxxxx というフォルダ内のファイルを取り出して編集する際に、「No such file or directory @ rb_sysopen」というエラーが発生しました。そのフォルダに自分でコピーしたファイルなのでないわけがない!と言っているのに、エラーになります。AI様に言われるようにデバッグコードを追加してログを見ると、「File exists: false」になっています。

エラーの原因と対策

ファイルパスを「/uploads/xxxxxx」としていることが原因だったようです。先頭の「/」をとり除いて「uploads/xxxxxx」とすると正常終了してくれました。コピー先のフォルダに指定する際もエラーにはなりませんし、フォーム上にリンクを配置して閲覧する場合も正常に動作します。なぜか、編集しようとするときだけ、意固地になってファイルがないと言い続けてくれました。

深堀りすれば原因はあるのでしょうが、今回はエラーが回避できたということで満足しておきます。

まとめ

いかがでしょうか。今回のエラーで三日ほど無駄に過ごし、AI様の言われるがままソースを修正していたら本来動いている箇所まで動かなくなってしまいました。

AIもまだまだ万能ではないようですね。ま、僕よりはるかに優秀なことは間違いありませんし、その差は今後光の速さよりも速く開いていくことも確定した未来のようです。

それでは、また。

コメント

  1. 通りすがり より:

    実行環境が書いてないので推測です。

    Linux OS上でRoRを走らせていてエラーならば
    ディレクトリの指定が間違っていると言うことになります。
    RoR的には相対パスで取得しようと思っていたら
    /uploads/と絶対パスで指定されたので取得しに行ったら
    そもそもドキュメントルートより上位にはRoRが上がれないので(推測)エラーになったのではないかと思います。

    もし開発環境が専用サーバーでしたら
    /uploads/
    と言うディレクトリをサーバー内に作り
    WebユーザーとRoRに777権限を与えればエラーは解決します。

    もちろんこれは脆弱性があるので公開サーバでは実施しないでください

    • jijigrammer jijigrammer より:

      コメントありがとうございます!
      ご想像の通り、Linux OS上でRoRを走らせています。
      今回のエラーはディレクトリの指定が間違っていたようですね。
      ご指摘ありがとうございます。

      中途半端な知識で開発・運営していると、トラブルになったときに大変な目にあいます。
      日ごろからの勉強が大切ですね。