Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用机架选择加载_Ruby_Sinatra_Rack - Fatal编程技术网

Ruby 使用机架选择加载

Ruby 使用机架选择加载,ruby,sinatra,rack,Ruby,Sinatra,Rack,我是一个彻头彻尾的傻瓜。我有两个sinatra等级engine_a.rb和engine_b.rb 希望使用ru文件传递rackoptions,如 $ rackup config.ru -O engine=a 我想使用类似于以下内容的机架选择加载 require 'engine_a' require 'engine_b' if rackoption == a run eng_a.new else if rackoption == b run eng_b.new end 请告诉我我这样

我是一个彻头彻尾的傻瓜。我有两个sinatra等级engine_a.rb和engine_b.rb

希望使用ru文件传递rackoptions,如

$ rackup config.ru -O engine=a
我想使用类似于以下内容的机架选择加载

require 'engine_a'
require 'engine_b'

if rackoption == a
  run eng_a.new
else if rackoption == b
  run eng_b.new
end
请告诉我我这样做的类比是否错误。如果没有,有人能帮我编写一个代码,帮助我实现同样的行为。我没有得到足够的关于这些的教程


另外,请告诉我rack是否是执行此操作的正确工具。

@padde提出了一个很好的观点,您需要向我们提供更多信息。然而,有选择地运行事物的一种简单方法是使用环境变量。最明显的经典用法是在生产中运行一些东西,在开发中运行一些东西,等等

if ENV["RACK_ENV"] == "production"
  # do this
elsif ENV["RACK_ENV"] == "staging"
 # do something almost the same
else
 # do something quite different
end
Rack通常会为您设置这些变量,但您可以使用不同的变量,如果您想从命令行运行它,可以使用
env MYVAR=1 bin/rackup config.ru


考虑@padde的请求,告诉我们您的目标,而不是您认为最好的实现(考虑到您不知道什么是最好的,或者您不会问;),也许您会得到更好的答案

您的最终目标是什么?为什么需要在两个sinatra应用程序之间切换?为了提供有用的答案或更好的解决方案,最好提供更多的背景信息。两个sinatra应用程序是两个不同的引擎(/方式)来做同样的事情。所以我需要有选择性的加载。我有两个引擎的生产和暂存环境。所以我不能真正使用这种方法。但无论如何,塔克斯。你能提出一些其他替代方案吗?我的目标是选择一个sinatra应用程序(cwd中不止一个),以响应通过命令行传递的变量。“这是否澄清了问题?”索拉吉特澄清了问题。您在问题中提出的是,您可以有条件地运行rack应用程序(只需尝试硬编码变量即可)。您可能会更好地使用env vars,因此
env ENGINE=a rackup config.ru-O
和if
env[“ENGINE”]=“a”,但我可能会将env var的设置添加到Rakefile中,并有两个任务
运行引擎a`和
运行引擎b
或类似的任务。