gpt4 book ai didi

ruby-on-rails - 升级到 Ruby 版本 2.1.2,乘客仍然在 1.9.3

转载 作者:行者123 更新时间:2023-12-04 15:22:09 24 4
gpt4 key购买 nike

每当我使用 RVM 和 Capistrano 更新 Ruby 及其 Gemlist 时,如何更新乘客使用的 Ruby 版本?检查我的应用程序是否使用正确的 ruby​​ 版本和 gemset 的最佳方法是什么?

我有一个运行在 Linode 服务器 (Ubuntu) 上的 Rails 应用程序,带有 NGinx 和Passenger。在它运行之前没有任何问题。

以前我的应用程序使用 Ruby 1.9.3-p194 运行 Ruby on Rails 3.2.16

我使用 RVM 在本地和服务器上管理 ruby​​ 版本。在我安装了 Ruby-2.1.2 并更新了基本 gems(bundler、nokogiri 等)之后,我为我的应用程序创建了我的新 gemset。

在开发中(本地),我使用 Ruby 2.1.2、rails 3.1.19(在我升级到 Rails 4 之前)和这个项目的特定 gemset。

我修改了我的 deploy.rb对于 Capistrano,遵循 RVM-Capistrano gem Integration

require "rvm/capistrano"
require "bundler/capistrano"

set :user, "myusername"
set :application, "myapp"

set :deploy_to, "/home/#{user}/apps/#{application}"
set :scm, :git
set :repository, "git@github.com:myusername/#{application}.git"
set :branch, "master"
set :rvm_ruby_string, :local # use the same ruby as used locally for deployment
set :rvm_autolibs_flag, "read-only" # more info: rvm help autolibs
set :use_sudo, false
set :deploy_via, :remote_cache
set :keep_releases, 3
default_run_options[:pty] = true
set :ssh_options, { :forward_agent => true }

before 'deploy:setup', 'rvm:install_rvm' # install/update RVM
before 'deploy:setup', 'rvm:install_ruby' # install Ruby and create gemset

after "deploy:restart", "deploy:cleanup"
after "deploy", "rvm:trust_rvmrc"

namespace :deploy do
task :start do ; end
task :stop do ; end
task :restart, :roles => :app, :except => { :no_release => true } do
run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
end

# ... some more tasks for assets and symlinks

end

namespace :rvm do
task :trust_rvmrc do
run "rvm rvmrc trust #{release_path}"
end
end

然后我跑了 cap deploy
我刷新了我的网页,Passenger 抛出以下错误:
It looks like Bundler could not find a gem. Maybe you didn't install all the gems that this application needs. To install your gems, please run:

bundle install
...
Could not find rake-10.3.2 in any of the sources (Bundler::GemNotFound)
/home/myusername/.rvm/gems/ruby-1.9.3-p194@global/gems/bundler-1.5.3/lib/bundler/spec_set.rb:92:in `block in materialize'
...
Ruby interpreter command
/home/myusername/.rvm/gems/ruby-1.9.3-p194/wrappers/ruby

很明显,Passenger 仍在运行 Ruby-1.9.3 而不是 Ruby-2.1.2。我不确定 RVM-Capistrano 是否安装/更新了 Ruby 版本和相应的 gemset。我不确定我错过了什么?

编辑:
我查了 nginx.conf作为 /opt/nginx/conf/nginx.conf 中的 root 用户

在我找到的文件顶部
...

http {
passenger_root /home/myusername/.rvm/gems/ruby-1.9.3-p194/gems/passenger-4.0.37;
passenger_ruby /home/myusername/.rvm/gems/ruby-1.9.3-p194/wrappers/ruby;

...

server {
listen 80;
server_name XXX.XXX.XX.XX myapp.com www.myapp.com *.myapp.com;
root /home/myusername/apps/myapp/current/public;
passenger_enabled on;
client_max_body_size 4G;
}

这是否意味着我必须用 ruby​​-2.1.2 更改这些行?有没有办法自动执行此更改?

更新 2:
我修改了 nginx.conf
http {
passenger_root /home/myusername/.rvm/gems/ruby-2.1.2@rails3.2/gems/passenger-4.0.53;
passenger_ruby /home/myusername/.rvm/gems/ruby-2.1.2@rails3.2/wrappers/ruby;

在我的 deploy.rb我明确告诉使用 gemset ruby-2.1.2@rails3.2
set :rvm_ruby_string, "2.1.2@rails3.2"

该应用程序运行良好,Ruby 解释器仍然是 1.9.3。我什至在管理页面上打印了 RUBY_VERSION常数,显示 1.9.3

我不明白...

谢谢你的帮助

最佳答案

如果您使用Passenger 4 或更高版本,则可以使用由rvm 管理的多个ruby 版本。

这里有一些指南的链接

http://rvm.io/integration/passenger
https://www.phusionpassenger.com/documentation/Users%20guide%20Nginx.html
https://www.phusionpassenger.com/documentation/Users%20guide%20Apache.html

看起来要在您的服务器中运行乘客安装/升级,您必须运行 rvmsudo -s第一的

关于ruby-on-rails - 升级到 Ruby 版本 2.1.2,乘客仍然在 1.9.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26327062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com