実現したいこと
SinatraとPumaを使用して、VScodeにてWebサーバを起動しRubyを実行させたい。
発生している問題・分からないこと
フォルダ作成後、
$ ruby app.rb -o $IP -p $PORT
を入力したがエラーが出る。
エラーメッセージ
error
1C:/Ruby33-x64/lib/ruby/gems/3.3.0/gems/sinatra-4.0.0/lib/sinatra/base.rb:1849: warning: Rack::Logger is deprecated and will be removed in Rack 3.2. 2== Sinatra (v4.0.0) has taken the stage on 4567 for development with backup from Puma 3*** SIGUSR2 not implemented, signal based restart unavailable! 4*** SIGUSR1 not implemented, signal based restart unavailable! 5*** SIGHUP not implemented, signal based logs reopening unavailable! 6Puma starting in single mode... 7* Puma version: 6.4.2 (ruby 3.3.4-p94) ("The Eagle of Durango") 8* Min threads: 0 9* Max threads: 5 10* Environment: development 11* PID: 6404 12== Sinatra has ended his set (crowd applauds) 13C:/Ruby33-x64/lib/ruby/gems/3.3.0/gems/puma-6.4.2/lib/puma/binder.rb:334:in `initialize': getaddrinfo: そのようなホストは不明です 。 (Socket::ResolutionError) 14 from C:/Ruby33-x64/lib/ruby/gems/3.3.0/gems/puma-6.4.2/lib/puma/binder.rb:334:in `new' 15 from C:/Ruby33-x64/lib/ruby/gems/3.3.0/gems/puma-6.4.2/lib/puma/binder.rb:334:in `add_tcp_listener' 16 from C:/Ruby33-x64/lib/ruby/gems/3.3.0/gems/puma-6.4.2/lib/puma/binder.rb:163:in `block in parse' 17 from C:/Ruby33-x64/lib/ruby/gems/3.3.0/gems/puma-6.4.2/lib/puma/binder.rb:146:in `each' 18 from C:/Ruby33-x64/lib/ruby/gems/3.3.0/gems/puma-6.4.2/lib/puma/binder.rb:146:in `parse' 19 from C:/Ruby33-x64/lib/ruby/gems/3.3.0/gems/puma-6.4.2/lib/puma/runner.rb:168:in `load_and_bind' 20 from C:/Ruby33-x64/lib/ruby/gems/3.3.0/gems/puma-6.4.2/lib/puma/single.rb:44:in `run' 21 from C:/Ruby33-x64/lib/ruby/gems/3.3.0/gems/puma-6.4.2/lib/puma/launcher.rb:194:in `run' 22 from C:/Ruby33-x64/lib/ruby/gems/3.3.0/gems/puma-6.4.2/lib/rack/handler/puma.rb:76:in `run' 23 from C:/Ruby33-x64/lib/ruby/gems/3.3.0/gems/sinatra-4.0.0/lib/sinatra/base.rb:1691:in `start_server' 24 from C:/Ruby33-x64/lib/ruby/gems/3.3.0/gems/sinatra-4.0.0/lib/sinatra/base.rb:1630:in `run!' 25 from C:/Ruby33-x64/lib/ruby/gems/3.3.0/gems/sinatra-4.0.0/lib/sinatra/main.rb:47:in `block in <module:Sinatra>'
該当のソースコード
app.rb
1require "sinatra" 2 3get "/" do 4 erb :index 5end
index.erb
1<!DOCTYPE html> 2<html lang="ja"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>タイトル</title> 6 </head> 7 <body> 8 <% name = '太郎' %> 9 <% time_japan = Time.now.getlocal %> 10 <p>今は<%= time_japan.hour %>時です。</p> 11 <% if 6 <= time_japan.hour && time_japan.hour < 12 %> 12 <p>おはよう、<%= name %>さん</p> 13 <% elsif 12 <= time_japan.hour && time_japan.hour < 18 %> 14 <p>こんにちは、<%= name %>さん</p> 15 <% else %> 16 <p>こんばんは、<%= name %>さん</p> 17 <% end %> 18 </body> 19</html>
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
ruby-debag-ideとdebaseというgemのインストールを試みたが、エラー発生。
補足
特になし
> $ ruby app.rb -o $IP -p $PORT
$IPの値は何ですか?IPアドレスや空文字列じゃなくて、ホスト名を書いてて、そのホスト名がアドレス解決できないと、お書きの「getaddrinfo: そのようなホストは不明です」というエラーメッセージが出ると思います。
コメントありがとうございます。
ここで書くべき$IPの値…とはなんでしょうか?汗
教科書の指示は、こちらでした。「Puma は Sinatra における標準サーバなので、下記のコマンドで自動起動します。$ ruby app.rb -o $IP -p $PORT」
Cloud9使用が前提ですが、私は訳あってVScodeを使っています。それが原因でしょうか…?
Cloud9はサービス終了ですね。どこでサーバーを起動しようとしているのでしょうか? ローカル開発しているのならlocalhostです。ポートはpumaのポートです。
なんと!意味分からず書いてるのですか??
$IP というのは「IPという名前の変数にセットされている値を取り出す」という意味なので、その前に、
IP=なにか
で設定しているはず。$PORTもです。
教科書に、「下記のコマンドで自動起動します。」と書いてあるのなら、
その前に変数IPとPORTに値をセットする手順が書いてあるはずですが、読み飛ばしたと言うことですかね?
> ここで書くべき$IPの値…とはなんでしょうか?汗
echo "ip : $IP port : $PORT"
の結果。
コメントありがとうございます。
ruby app.rb -o $IP 127.0.0.1 -p $PORT 3000
に変えたところ、無事Sinatraは起動しているようです。そしてブラウザでサーバを起動したいときは、$IPの値を変えるのでしょうか??
C:/Ruby33-x64/lib/ruby/gems/3.3.0/gems/sinatra-4.0.0/lib/sinatra/base.rb:1849: warning: Rack::Logger is deprecated and will be removed in Rack 3.2.
== Sinatra (v4.0.0) has taken the stage on 3000 for development with backup from Puma
*** SIGUSR2 not implemented, signal based restart unavailable!
*** SIGUSR1 not implemented, signal based restart unavailable!
*** SIGHUP not implemented, signal based logs reopening unavailable!
Puma starting in single mode...
* Puma version: 6.4.2 (ruby 3.3.4-p94) ("The Eagle of Durango")
* Min threads: 0
* Max threads: 5
* Environment: development
* PID: 21900
* Listening on http://127.0.0.1:3000
Use Ctrl-C to stop
otnさん、mike2mike4さん、回答が入り乱れてすみません。
otnさんへ
IPとPORTに値をセットするくだりは見つかりませんでした…なぜ。
本来、以下のログが出るそうです。
== Sinatra (v1.4.7) has taken the stage on 8080 for development with backup from Puma
Puma starting in single mode...
* Version 3.6.2 (ruby 2.3.0-p0), codename: Sleepy Sunday Serenity
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://0.0.0.0:8080
Use Ctrl-C to stop
> IPとPORTに値をセットするくだりは見つかりませんでした…なぜ。
落丁か、上中下とかに別れていて別のテキストにあるか、著者が書き忘れたか、
著者が「読者もこれくらいは自分で判断して自分でセットするだろう」と判断して省略したか。
> 本来、以下のログが出るそうです。
> * Listening on tcp://0.0.0.0:8080
なら、
ruby app.rb -o 0.0.0.0 -p 8080
ですね。変数を使う必要は無いです。
・-o で何を指定するのか
・-p で何を指定するのか
を理解しましょう。
修正しました。
ここからブラウザでファイルを実行させるにはどうしたらよいでしょうか?
引き続き教えていただけると幸いです。
> ここからブラウザでファイルを実行させるにはどうしたらよいでしょうか?
「ブラウザでファイルを実行させる」??
次にやるのは、ブラウザでウェブサイトを表示するということのはずなので、そのことの意味なら、ブラウザのアドレスバーにURLを入力します。URLは、テキストに書いてあると思うのですが、そこすら「読者もこれくらいは自分で判断して出来るだろうから書かない」という方針の著者なのであれば、テキストのレベルが合ってないので、もっと入門者向けのテキストに変えた方が良いです。
あなたの回答
tips
プレビュー