簡體   English   中英

Rails教程2.2:Puma服務器

[英]Rails Tutorial 2.2: Puma Server

我正在嘗試從Rails教程書中學習Rails,獲得了lubuntu,所以我可以嘗試獲得最佳體驗。 現在,我堅持要簡單易行的東西。

我們正在創建一個“玩具應用”,一個非常基本的推特之類的東西,但仍然在一開始,我們就使用了:

$ rails generate scaffold User name:string email:string

如果我沒記錯的話,要生成一個用戶表,然后:

$ rails db:migrate

我猜想更新一個預先存在的表結構(不確定,但是據說稍后將進行解釋)。

最后,我們應該運行以下命令:

 $ rails server -b $IP -p $PORT

在一個差異選項卡中,我確實得到了這個錯誤:

~/workspace/toy_app$ rails server -b $IP -p $PORT
=> Booting Puma
=> Rails 5.0.0.1 application starting in development on http://-p:3000
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.4.0 (ruby 2.3.1-p112), codename: Owl Bowl Brawl
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://-p:3000
Exiting
/var/lib/gems/2.3.0/gems/puma-3.4.0/lib/puma/binder.rb:255:in `initialize': getaddrinfo: Name or service not known (SocketError)
    from /var/lib/gems/2.3.0/gems/puma-3.4.0/lib/puma/binder.rb:255:in `new'
    from /var/lib/gems/2.3.0/gems/puma-3.4.0/lib/puma/binder.rb:255:in `add_tcp_listener'
    from /var/lib/gems/2.3.0/gems/puma-3.4.0/lib/puma/binder.rb:102:in `block in parse'
    from /var/lib/gems/2.3.0/gems/puma-3.4.0/lib/puma/binder.rb:85:in `each'
    from /var/lib/gems/2.3.0/gems/puma-3.4.0/lib/puma/binder.rb:85:in `parse'
    from /var/lib/gems/2.3.0/gems/puma-3.4.0/lib/puma/runner.rb:129:in `load_and_bind'
    from /var/lib/gems/2.3.0/gems/puma-3.4.0/lib/puma/single.rb:84:in `run'
    from /var/lib/gems/2.3.0/gems/puma-3.4.0/lib/puma/launcher.rb:172:in `run'
    from /var/lib/gems/2.3.0/gems/puma-3.4.0/lib/rack/handler/puma.rb:51:in `run'
    from /var/lib/gems/2.3.0/gems/rack-2.0.1/lib/rack/server.rb:296:in `start'
    from /var/lib/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands/server.rb:79:in `start'
    from /var/lib/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:90:in `block in server'
    from /var/lib/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:85:in `tap'
    from /var/lib/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:85:in `server'
    from /var/lib/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!'
    from /var/lib/gems/2.3.0/gems/railties-5.0.0.1/lib/rails/commands.rb:18:in `<top (required)>'
    from /home/zero/workspace/toy_app/bin/rails:9:in `require'
    from /home/zero/workspace/toy_app/bin/rails:9:in `<top (required)>'
    from /var/lib/gems/2.3.0/gems/spring-1.7.2/lib/spring/client/rails.rb:28:in `load'
    from /var/lib/gems/2.3.0/gems/spring-1.7.2/lib/spring/client/rails.rb:28:in `call'
    from /var/lib/gems/2.3.0/gems/spring-1.7.2/lib/spring/client/command.rb:7:in `call'
    from /var/lib/gems/2.3.0/gems/spring-1.7.2/lib/spring/client.rb:30:in `run'
    from /var/lib/gems/2.3.0/gems/spring-1.7.2/bin/spring:49:in `<top (required)>'
    from /var/lib/gems/2.3.0/gems/spring-1.7.2/lib/spring/binstub.rb:11:in `load'
    from /var/lib/gems/2.3.0/gems/spring-1.7.2/lib/spring/binstub.rb:11:in `<top (required)>'
    from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /home/zero/workspace/toy_app/bin/spring:13:in `<top (required)>'
    from bin/rails:3:in `load'
    from bin/rails:3:in `<main>'

有東西損壞了嗎? 我做錯了嗎? 我去檢查了我記得看到puma的文件(在app文件夾中),它在gem文件中:

gem 'puma',         '3.4.0'

和puma.rb文件(刪除注釋):

threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i
threads threads_count, threads_count

port        ENV.fetch("PORT") { 3000 }

environment ENV.fetch("RAILS_ENV") { "development" }

plugin :tmp_restart

我本來要放所有提到的文件,但這是大量的代碼,如果有用的話,我會發布它,我不想用可能無用的代碼來發送垃圾郵件。

$IP在您的環境中未定義,因此rails server正在嘗試使用-p作為IP地址。 嘗試這個:

rails server -b ${IP:-127.0.0.1} -p ${PORT:-3000}

或者,在運行rails server -b $IP -p $PORT之前,使用export設置這些環境變量:

export IP=127.0.0.1
export PORT=3000

或者,如果您對Rails的默認設置感到滿意,則只需忘記所有這些並運行rails server :-)

如果您在本地運行,則應該可以使用不帶參數的rails server 如果您使用的是Hartl教程,則假定您使用的是基於Web的IDE,該IDE需要額外的參數。

如果您使用的是cloud based IDE ,則需要收聽particular IP & PORT 例如, C9 ,您需要收聽0.0.0.0 and 8080 因此,它們具有設置environment variables, $IP & $PORT.

如果執行

echo $IP  ###gives 0.0.0.0
echo $PORT ###gives 8080

rails s -b $IP -p $PORT  ##Rails x.x.x application starting in development on http://0.0.0.0:8080

-b選項將Rails綁定到指定的IP,默認情況下為localhost。

如果您在本地計算機上,請運行

rails s ### Rails x.x.x application starting in development on http://localhost:3000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM