`
grantbb
  • 浏览: 271913 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在Sinatra中灵活地配置Environments

    博客分类:
  • Ruby
阅读更多

在Sinatra中灵活的配置Environments

 

在Sinatra中有三个预先定义的环境属性值,包括:development, test, production.

这个当前所处的环境的值还可以通过RACK_ENV这个环境变量来设置。如果什么都不设置,默认就是develpment。

 

之所以要区分不同环境的值,主要是我们在不同的环境下需要采用不同的配置。例如:开发环境采用postgres,测试环境运行自动化测试用sqlite,产品环境部署需要用到Cloud Foundry上的Postgres Service。

 

首先,使用configure来设置不同环境的配置。比如上面的数据库配置的例子:

  configure :development do
    DataMapper.setup(:default, "postgres://localhost/test")
    DataMapper.finalize.auto_upgrade!
  end

  configure :test do
    DataMapper.setup(:default, "sqlite::memory:")
  end

  configure :production do
    load_postgres_on_cloudfoundry
    DataMapper.finalize.auto_upgrade!
  end
 其中,production环境中load_postgres_on_cloudfoundry方法负责具体获取和初始化Cloud Foundry上数据库的配置。Rack应用部署到Cloud Foundry的时候,环境变量RACK_ENV会设置为production。

 

在本地开发调试的时候可以设置RACK_ENV这个环境变量来制定,也可以通过命令行参数来指定。例如: ruby my_app.rb -e [ENVIRONMENT]

 

还可以在代码中通过set指令设置,例如:set :environment, :production。如果不用set设置,:environment默认就是ENV['RACK_ENV']

 

同时在Sinatra的应用中,我们可以通过预定义的development?, test?和production?方法来检查和判断当前的环境的设置。

 

------------------------------------------------------------------------------------------------------

 

上面这些就是最常见的使用方式。接下来介绍一个Sinatra的一个扩展config_file,可以方便我们使用单独的YAML文件来配置不同的环境属性。

它可以自动发现配置文件中的设置,并且采用跟当前的环境对应的属性设置。在应用中我们可以通过settings来访问这些配置。

 

需要先安装:gem install sinatra-contrib

 

使用方法:先写一个config.yml文件

greeting: Welcome to my file configurable application

 在典型的Sinatra应用中读取greeting的值:

require "sinatra"
require "sinatra/config_file"

config_file 'path/to/config.yml'

get '/' do
  @greeting = settings.greeting
  haml :index
end

# The rest of your classic application code goes here...

 在模块化的Sinatra的应用中:

require "sinatra/base"
require "sinatra/config_file"

class MyApp < Sinatra::Base
  register Sinatra::ConfigFile

  config_file 'path/to/config.yml'

  get '/' do
    @greeting = settings.greeting
    haml :index
  end

  # The rest of your modular application code goes here...
end
 上面的例子是最简单的用法,下面再说明一下如何针对不同的环境分别进行配置:

方法一:

development:
  foo: development
  bar: bar
test:
  foo: test
  bar: bar
production:
  foo: production
  bar: bar

方法二:

foo:
  development: development
  test: test
  production: production
bar: bar

不管采用那种方法,setting.foo可以取得对应的环境的名称,settings.bar的值为bar

 

关于环境的配置,最后一点是如果我们有除了development, test, production之外更多的环境需要配置,比如:staging环境。

我们可以通过设置environments来增加更多的环境。

例如:

set :environments, %w{development test production staging}

参考文档:

    1.http://www.sinatrarb.com/contrib/config_file.html   

1
5
分享到:
评论

相关推荐

    jump star sinatra sinatra教程

    Darren 从事编程和网站建设已经超过十年,在 2007 年发现了 Ruby 和 Rails,之后又发现了 Sinatra 并深深地被它的优雅所吸引。2010 年初,他创建了“IDidItMyWay”博客来记录自己学习 Sinatra 的过程,并在同年利用 ...

    Sinatra并发性提升扩展Sinatra::Synchrony.zip

    Sinatra::Synchrony允许我们做异步程序,除了那些在Fibers中封装了回调操作的。这让我们能够实现同步程序的同时利用异步代码的优势。除了可以这样简单地变成,它也让我们根据需要可以转换一个不同的并发策略。

    PHP版本的Sinatra极其轻量优雅的web领域专用语言框架

    Sinatra在Ruby世界里以其简洁、高效的语法而著名,使得开发者能快速构建Web应用。Pinatra同样致力于提供这样的体验,为PHP开发者提供一种轻量级、面向表达式的Web开发解决方案。 【描述】提到"Sinatra的一个PHP复制...

    Ruby-Padrino一个构建在Sinatra上的全堆栈ruby框架

    2. **强大的路由系统**:继承自Sinatra,Padrino的路由系统支持灵活的URL映射,可以方便地定义各种路由规则,并支持命名路由,方便链接生成和重定向。 3. **模板引擎支持**:Padrino支持多种模板引擎,如ERB、Haml...

    sinatra-template-源码.rar

    在Sinatra中,我们可以配置使用Slim模板,并通过`slim`助手渲染。 三、中间件 1. 中间件在Sinatra中扮演着重要角色,它们在请求和响应之间工作,提供额外的功能,如日志记录、会话管理、认证等。例如,`use Rack::...

    sinatra-pubsub, 为 Sinatra 推送&流.zip

    sinatra-pubsub, 为 Sinatra 推送&流 Sinatra::PubSubPubSub是对 Sinatra的扩展,它增加了使用HTML5服务器发送事件的基本发布/订阅流。例如客户端可以订阅以下事件:var es = new EventSource('/subscribe

    almost-sinatra, Sinatra 重构,现在只有六个行 比一双袜子更受欢迎.zip

    almost-sinatra, Sinatra 重构,现在只有六个行 比一双袜子更受欢迎 几乎 Sinatra "until programmers stop acting like obfuscation is morally hazardous,they're not artists, just kid

    sinatra-bootstrap:一个简单的Sinatra起点

    这个rake命令为您在后台运行bundle exec shotgun config.ru ,并在Sinatra的默认端口9393上启动该应用程序,现在将可以在您的Web浏览器中通过以下URL 查看该应用程序。 您还需要在同一个目录中打开一个新的终端窗口...

    sinatra-hello-world-basics-onl01-seng-ft-090820-master.rar

    在文件名称列表中,我们只有一个条目 "sinatra-hello-world-basics-onl01-seng-ft-090820-master.zip",这通常是一个包含整个项目文件的主目录。解压后,可能会有如下结构: 1. `Gemfile`: 这是Ruby项目中用于管理...

    Ruby-RedisDashboard一个用于监控Redis服务器的Sinatra应用

    3. **配置**:在`config.ru`或Rails项目的配置文件中设置Redis连接参数。 4. **启动应用**:使用`rackup`命令启动Sinatra应用,或者在Rails中通过`rails s`启动。 5. **访问Web界面**:打开浏览器,输入服务器地址和...

    sinatra-graphql:分步教程在sinatra(ruby)中编写graphql服务器

    使用 gem在sinatra(ruby)中编写graphql服务器的分步教程。 脚步 步骤1:创建Sinatra应用程序 步骤2:添加JSON响应 步骤3:使用ActiveRecord添加数据库连接和模型 步骤4:添加graphql并定义查询以列出发言者 步骤5...

    sinatra-cross_origin:Sinatra的跨源请求共享扩展

    关于 用于启用跨域资源共享(CORS)的简单Sinatra扩展要查看有关跨域资源共享的更多信息,请参阅 使用捆绑器安装 gem "sinatra-cross_origin", "~&gt; 0.3.1" 例子 要为所有路由启用跨源...全局配置 您可以通过常规的Si

    rubyinstaller+配置方法

    至此,你已经成功地使用RubyInstaller配置了Ruby环境,并且在Eclipse中创建了一个功能完备的Ruby开发环境。记住,持续学习和探索各种Ruby库和框架,如Sinatra、Padrino等,将会极大地提升你的Ruby开发技能。同时,...

    sinatra-auth:用于用户身份验证的简单Sinatra样板

    在Sinatra中,Ruby的灵活性使开发者能够快速构建功能丰富的Web应用。 在"sinatra-auth-master"这个压缩包中,我们可能找到以下文件和目录: 1. `config.ru` - 这是Sinatra应用的入口点,通常用于配置rack服务器和...

    sinatra-starter-kit:我的个人Sinatra配置和脚本“起床走走”

    这是我当前的Sinatra配置,我希望以此开始每个新站点。 它会和我一起发展,是我个人的宠物项目。 但是,我觉得这对其他人(也喜欢Sinatra)也可能有用,并且希望分享。 如果您有任何要添加到项目中的内容,请向我...

    Ruby-Sinatra-SampleApp:Ruby + Sinatra + Sequel的示例应用程序

    下面将详细阐述Ruby、Sinatra和Sequel在构建Web应用中的角色以及它们之间的协同工作。 **Ruby** 是一种面向对象的、动态类型的编程语言,以其简洁的语法和强大的元编程能力而受到开发者喜爱。在Web开发领域,Ruby被...

    sinatra-starter-template:sinatra快速入门模板

    Sinatra快速入门模板使用方式如下: $ quik new sinatra这将下载并运行 starter向导脚本( )。 导致: Hello from the sinatra quick starter wizard scriptQ: Name of the sinatra app? [hola]: holaThanks! Ready...

    authlane:Sinatra 的简单用户身份验证和角色

    实际的身份验证逻辑(策略)由应用程序使用此扩展提供的命名空间 DSL 定义,而通用扩展配置则使用 Sinatra 的set方法处理,这将在下面更详细地描述。安装获得宝石: gem install authlane或者让 Bundler 来做这项...

    sinatra:穿着DSL(官方规范仓库)的经典Web开发

    Sinatra是一种用于以最少的精力在Ruby中快速创建Web应用程序: # myapp.rb require 'sinatra' get '/' do 'Hello world!' end 安装gem: gem install sinatra 并运行: ruby myapp.rb 查看位于: 重新启动...

    sinatra-respond_to:用于Sinatra中内置Web服务支持的response_to样式Rails块

    在Sinatra中提供对内置Web服务支持的response_to样式Rails块 功能/问题: 根据提供的内容处理内容类型的设置 自动可以调整XMLHttpRequests返回Javascript 根据HTTP_ACCEPT标头解析识别请求。 优先级的顺序是...

Global site tag (gtag.js) - Google Analytics