Padrino:在将另一个项目安装到主项目后找不到安装的路由器

时间:2014-08-20 06:07:09

标签: ruby rack mount padrino

问题说明:

有两个项目,一个是主项目,另一个项目是timesheet_app。 我想将timeheet_app挂载到主项目。

当访问网址http://localhost:3000/tsheet/base时,它说  " Sinatra不知道这个小曲"

Try this:
# in app.rb
class Qiankun::App
  get '/tsheet/base' do
    "Hello World"
  end
end

这是控制台输出

 DEBUG - 20/Aug/2014 14:15:22      GET (0.0870s) /tsheet/base - 404 Not Found
 DEVEL - 20/Aug/2014 14:15:22 Reloading application TimesheetApp::App
 DEVEL - 20/Aug/2014 14:15:22 Reloading application TimesheetApp::App
 DEVEL - 20/Aug/2014 14:15:22 Reloading application TimesheetApp::Tsheet
 DEVEL - 20/Aug/2014 14:15:22 Reloading application TimesheetApp::Tsheet
 DEBUG - 20/Aug/2014 14:15:22      GET (0.1120s) /tsheet/__sinatra__/404.png -
04 Not Modified

在timesheet_app self中,运行" padrino start"后,访问http://localhost:3000/base is ok.

在主项目中,检查" rake routes",找到另一个项目的网址" tsheet / base"就在那里。

 (:base, :index)      GET    /tsheet/base

下面是一些与mount相关的代码。

主项目apps.rb

中的

Padrino.mount('TimesheetApp::App', :app_file => TimesheetApp.root('app/app.rb')).to('/time_sheet')
Padrino.mount('TimesheetApp::Tsheet', :app_file => TimesheetApp.root('tsheet/app.rb')).to("/tsheet")
主项目gemfile中的

   gem 'timesheet_app',:path=>"d:\\IdeaLab\\timesheet_app",:require=>"timesheet_app"

这是控制器代码,很简单

TimesheetApp::Tsheet.controllers :base do
   enable  :reload

  get :index do
   "hello , tsheet!"
  end
end

任何想法?可能是padrino框架中的一个错误?

padrino版本0.12.3

2 个答案:

答案 0 :(得分:0)

我认为mount.to('/time_sheet')混淆了我和你,甚至可能是padrino。

它应该提供以下地址:http://localhost:3000/time_sheet/tsheet/basehttp://localhost:3000/tsheet/(索引)。

应用程序没有"知道"它们安装在哪里,这使您更容易定义" local"应用程序并定义控制器,如果您稍后在其他地方包含此应用程序,则无需更改。

什么使得事情更难以消化然后必要的是你定义get '/tsheet/base然后将某些东西装载为tsheet,这也使得讨论更加困难。如果您的问题没有回答,请先考虑重命名,以便让您的示例更容易理解和讨论。

答案 1 :(得分:0)

快速修复:请将set:reload,false设置为您的gemified应用程序。

https://github.com/padrino/padrino-framework/issues/1746