首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sinatra exec/system 'bundler exec‘

Sinatra exec/system 'bundler exec‘
EN

Stack Overflow用户
提问于 2012-07-16 23:56:46
回答 2查看 751关注 0票数 2

我正在尝试拼凑一个快速的Sinatra应用程序来调用一些测试ruby脚本,这些脚本需要自己的Bundler env才能运行。

在我的Sinatra应用程序中形成一个方法,我想运行如下内容

代码语言:javascript
复制
system("cd /test_app/; bundle exec ruby some_file.rb")

这是由于bundler设置其环境的方式造成的。有没有办法启动一个新的shell会话来执行我的脚本,这样它就可以在Sinatra中工作了?

或者有其他方法可以做到这一点?基本上,我唯一的要求是这些脚本可以从网页上的链接触发,这样一些团队成员就可以启动测试过程。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-23 22:51:02

找到了这段代码,它可以很好地清理捆绑包的环境。- http://johnbintz.github.com/blog/2012/02/02/the-cleanest-bundler-env/

代码语言:javascript
复制
Bundler.with_sparkling_clean_env do
  system("cd /test_app; bundle --gemfile ./Gemfile exec ruby #{cmd}")
end

module Bundler
  class << self
    def with_sparkling_clean_env
      oenv = ENV.to_hash

      %w{BUNDLE_GEMFILE RUBYOPT GEM_HOME GIT_DIR GIT_WORK_TREE}.each { |key| ENV.delete(key) }

      yield

      ENV.replace(oenv)
    end
  end
end
票数 1
EN

Stack Overflow用户

发布于 2012-07-17 01:33:19

这似乎起作用了:

代码语言:javascript
复制
Dir.chdir "/test_app"
`bundle exec ruby some_file.rb`

在启动sinatra之前,我还需要rvm use ruby-1.9.2-p320来获取正确的红宝石。rvm不喜欢被告知在ruby进程中改变自身。(这是有道理的!)

(使用反刻度号而不是system()可以得到输出,这样就可以打印它了。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11507998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档