我正在尝试拼凑一个快速的Sinatra应用程序来调用一些测试ruby脚本,这些脚本需要自己的Bundler env才能运行。
在我的Sinatra应用程序中形成一个方法,我想运行如下内容
system("cd /test_app/; bundle exec ruby some_file.rb")这是由于bundler设置其环境的方式造成的。有没有办法启动一个新的shell会话来执行我的脚本,这样它就可以在Sinatra中工作了?
或者有其他方法可以做到这一点?基本上,我唯一的要求是这些脚本可以从网页上的链接触发,这样一些团队成员就可以启动测试过程。
发布于 2012-07-23 22:51:02
找到了这段代码,它可以很好地清理捆绑包的环境。- http://johnbintz.github.com/blog/2012/02/02/the-cleanest-bundler-env/
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发布于 2012-07-17 01:33:19
这似乎起作用了:
Dir.chdir "/test_app"
`bundle exec ruby some_file.rb`在启动sinatra之前,我还需要rvm use ruby-1.9.2-p320来获取正确的红宝石。rvm不喜欢被告知在ruby进程中改变自身。(这是有道理的!)
(使用反刻度号而不是system()可以得到输出,这样就可以打印它了。)
https://stackoverflow.com/questions/11507998
复制相似问题