【问题标题】:Switching ruby version to run a command on server切换 ruby​​ 版本以在服务器上运行命令
【发布时间】:2013-04-18 11:46:41
【问题描述】:

我有一个使用 capistrano 部署的 Ruby 应用程序(非 Rails)。我可以 ssh 进入我的服务器,cd 进入 /current 目录并使用命令启动它

ruby tweet_tracker.rb start

但是,如果我 cd 上一级并运行

ruby current/tweet_tracker.rb start

我得到错误:

/home/deploy/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- tweetstream (LoadError)
    from /home/deploy/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /home/deploy/dev/tweet_tracker/current/tweet_tracker.rb:4:in `<main>'

现在这显然是因为我在每个目录中使用不同的 ruby​​ 版本运行命令。

我在应用程序中有一个.ruby-version 文件,它指定了ruby-1.9.3-p392。我的 capistrano 部署脚本指定 set :rvm_ruby_string, '1.9.3-p392',当它在部署过程中运行 bundle install 时,它会安装 193-p392 的 gem。

问题是,当我尝试从应用程序目录之外启动应用程序时,它使用默认的 Ruby(由 RVM 设置为 193 的较低版本)。

如何确保应用程序在运行时使用.ruby-version 指定的Ruby 版本?

我宁愿不更改 RVM 的默认 Ruby 版本,因为系统上正在运行其他应用程序。

【问题讨论】:

  • 您可以创建一个脚本来 cd 到正确的文件夹并启动应用程序吗?

标签: ruby rvm capistrano rvm-capistrano


【解决方案1】:

这是一个示例项目:

myproject/
├── .ruby-version
└── subproject/
    ├── .ruby-version
    └── script.rb

myproject/.ruby_version:

system

我的项目/子项目/.ruby_version:

ruby-1.9.3-p392

我的项目/子项目/script.rb:

puts RUBY_VERSION

现在我想你的问题可以这样模仿:

$ cd myproject
$ ruby subproject/script.rb
1.8.7
$ cd subproject
$ ruby script.rb
1.9.3

解决此问题的一种方法是使用记录不充分的命令rvm exec

$ cd myproject
$ rvm 1.9.3-p392 exec ruby subproject/script.rb
1.9.3

您可以扩展它以自动读取.ruby-version 文件:

$ rvm `cat subproject/.ruby-version` exec ruby subproject/script.rb
1.9.3

【讨论】:

    【解决方案2】:

    在编写调用 Ruby 应用程序的脚本时,RVM 通常会非常痛苦。许多用户已经迁移到更好的Ruby version wrapper。 RVM 的主要问题之一是它非常适合 interactive shells,但不适用于脚本。

    主要问题是 RVM 设置了一个after_cd hook,而这是你只能在交互式 shell 中获得的东西;因此,用户需要运行一系列与此类似的命令:

    cd $APPDIR
    source /home/$APPUSER/.rvm/scripts/rvm
    rvm rvmrc trust && rvm rvmrc load
    bundle exec ./bin/server start
    

    您可以使用rvm wrapper 生成初始化脚本。虽然,例如,与Upstart configuration 集成有点棘手。

    【讨论】:

      猜你喜欢
      • 2020-05-27
      • 2020-03-27
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多