我正在玩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上下文中)这样做呢?
答案 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
的命令中。
我觉得这个选择很舒服,不是因为我认为这是“正确的选择”,而是因为我想我知道如何以及为什么我会改变主意。对我来说足够好了。
我希望这会有所帮助。