2016-06-24 18 views
1

は、私は別のファイルにルートを設定するためのこの方法を示していを通じてつもりです:シナトラルーティング - 別々のファイル

# app.rb 
require "sinatra" 
require "slim" 

class Todo < Sinatra::Base 
    # ... 
    Dir[File.join(File.dirname(__FILE__), "lib", "*.rb")].each { |lib| require lib } 
end 

# lib/routes.rb 
get "/test" do 
    "The application is running" 
end 

# config.ru 
require "sinatra" 
require "bundler/setup" 
Bundler.require 

ENV["RACK_ENV"] = "development" 

require File.join(File.dirname(__FILE__), "app.rb") 

Todo.start! 

はしかし、それはhttp://localhost:4567/testでルートを見つけることができません。 ruby config.ruまたはbundle exec rackup -p 4567を実行すると、これがうまくいくはずです。しかし、このすべての設定が組み込まれているRailsの開発から来て、私はすべてが一緒に配線される方法を完全に理解していません。サーバーはそのポートで実行されており、私はSinatra doesn't know this ditty 404ページを取得します。クラスas suggested by this SO answerを再度開くと、/testルートが見つかります。

# lib/routes.rb 
class Todo < Sinatra::Base 
    get "/test" do 
    "The application is running" 
    end 
end 

クラスを再度開くことなく経路を含めるための提案された方法がありますか?

+0

本書のコードはそのままですか?それにはかなりの問題があります。 – matt

+0

(トピックを外して:あなたのSSL証明書は期限切れです。) – matt

+0

@matt最初のブロックのコードはすべて、 'require" slim "行を除いて、本のものです。 'app.rb'ファイル('#... ')で省略された行以外は、これらの3つのファイルに与えられたすべてのものです。他の問題が何であるか聞くことに興味があります。 SSL証明書をお寄せいただきありがとうございます。 – Shaun

答えて

1

実行中に追加されたルートを読み込むには、Webサーバーを再起動する必要があります。 app.rbが呼び出され、Sinatraが起動されると、ルートがメモリにロードされます。ルート自体は正常に表示され、Dir[File.join(File.dirname(__FILE__), "lib", "*.rb")].each { |lib| require lib }経由でroutes.rbが正常にインポートされているようです。

Ctrl+Xから直接サーバーを実行している場合は、Ctrl+Cをシャットダウンしてから、rackup config.ru *またはruby app.rbで再起動してください。あなたは、あなたのブラウザからのリクエストを受けて、http://127.0.0.1:4567/testにルートが認識されていることを確認することができます。これは単なる展開便利です

# config.ru 
require './app' 
run Sinatra::Application 

仕事にrackup config.ruコマンドでは、次のようなものにconfig.ruを変更することができます。

編集:@shaun TodoSinatra::Baseになるので、あなたの場合はrun Todoを使用しても問題ありません。

2

ruby app.rbを試してください。うまくいくはずです。

+0

これはうまくいきますが、私は乗客と一緒にアプリを展開するために 'config.ru'ファイルを通過する必要があると思います。 – Shaun

1

config.ruファイルからアプリケーションを実行することを示していますが、Sinatra documentationの例ではrun Sinatra::Applicationを使用しています。だから、僕は

動作するようです
run Todo 

Todo.start!から行を変更しましたが、私は結果を検討する必要があります。

関連する問題