在使用thin调用时,如何在加载路径中获取ruby源?

时间:2012-06-21 22:29:45

标签: ruby sinatra rack thin

我正在玩Thin,Sinatra和Bundler的组合。我试图理解我如何变薄以在加载路径中包含我的源代码的路径?我已经为这个设置寻找了入门教程,但它们似乎都没有回答我的问题。

使用rackup文件或Thin配置文件搞错了。假设我的目录结构类似于:

bin/my-application-entry.rb # The entry point to my sinatra application
lib/myapp/mylibs.rb
thin/config.ru # rackup config
thin/dev.yaml  # thin config
Gemfile        # for my dependencies

架构文件的内容基本上是

require 'sinatra'
# I'd like to require 'my-application-entry' around here somewhere (I think?)
run Sinatra.application

我用

调用应用程序
thin -C thin/dev.yaml -R thin/config.ru start

我注意到thin使用命令行参数来要求特定的库,但是肯定有一个更好的地方可以定义所有的加载路径?

所以我的问题是,如何告诉瘦/ rack / bundler要包含哪些目录? (例如bin /和lib /)

编辑:为了清楚起见,我真的想知道具体如何通常使用Thin来完成。我不愿意在我的主应用程序中修改$:但是如果我被迫使用$ :,那么最好的地方(在Thin / Rack / Sinatra上下文中)这样做呢?

2 个答案:

答案 0 :(得分:0)

$:是描述加载路径的全局变量,表示为数组。您可以添加“。”,然后如果您关心,删除重复项,如下所示:

$:.unshift(".").uniq!

或者你可以把它推到列表的末尾:

$:.push(".").uniq!

默认情况下,它经常被省略,因为它存在潜在的安全隐患。

答案 1 :(得分:0)

我想知道同样的事情。我会告诉你我在做什么,并试图证明它的合理性。也许在写这篇文章的过程中,我会想出一些东西。

我现在决定在$LOAD_PATH中添加config.ru,因为我使用config.ru作为我的应用程序的入口点。我可以逃避这个因为我打算将这个文件保留在项目的根目录中。我不喜欢做这个假设,但现在看起来很安全。当然,我会发表评论说“Ew。假设这个文件是应用程序的唯一入口点,并且它始终位于项目的根目录中。”

我之所以选择这个是因为我希望尽可能在调用堆栈中添加$LOAD_PATH(依赖性倒置原则),但是在运行应用程序的命令中执行此操作(Procfile running {生产中的{1}};在开发中运行thin的命令行)复制了我想要添加到加载路径的目录。我是否将此复制分类为必要(值得删除)或巧合(值得复制)?就目前而言,它看起来像应用程序的一个重要方面,至少在我决定组织它时,因为应用程序将各种服务集成到单个请求/响应/路由引擎中。此外,shotgun描述了应用,因此将其视为应用是有意义的。

如果情况发生变化,我发现我想在开发中使用与生产中不同的config.ru,那么我会将调用堆栈中的目录移动到运行$LOAD_PATH的命令中。

我觉得这个选择很舒服,不是因为我认为这是“正确的选择”,而是因为我想我知道如何以及为什么我会改变主意。对我来说足够好了。

我希望这会有所帮助。