由于开发和部署服务器上的ruby补丁版本不同,因此无法在部署服务器上获取linecache19

时间:2012-10-20 05:38:18

标签: ruby-on-rails ruby rails-3-upgrade

按照此stackoverflow上的说明后,我能够在本地计算机上运行它。我甚至在部署服务器上安装了gem,并可以在本地运行服务器。

Rails with ruby-debugger throw 'Symbol not found: _ruby_current_thread (LoadError)'

对于部署,我们使用的是Capistrano,问题是Gemfile包含以下内容:

gem 'linecache19', '0.5.13', :path => "~/.rvm/gems/ruby-1.9.3-p#{RUBY_PATCHLEVEL}/gems/linecache19-0.5.13/"
gem 'ruby-debug-base19', '0.11.26', :path => "~/.rvm/gems/ruby-1.9.3-p#{RUBY_PATCHLEVEL}/gems/ruby-debug-base19-0.11.26/"

因为RUBY_PATCHLEVEL在服务器和我的本地机器上是不同的,所以它将我的本地机器路径添加到Gemfile.lock,并且在服务器上它尝试在那里找到gem,但是因为补丁不同而不能。

下面是堆栈跟踪

您正在尝试在更改Gemfile后以部署模式安装。在其他地方运行bundle install并将更新的Gemfile.lock添加到版本控制。

You have added to the Gemfile:
* source: source at ~/.rvm/gems/ruby-1.9.3-p125/gems/ruby-debug-base19-0.11.26/
* source: source at ~/.rvm/gems/ruby-1.9.3-p125/gems/linecache19-0.5.13/

我的本​​地机器ruby版本是1.9.3-p194,服务器有1.9.3-p125。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

使用'.rvmrc file指定项目应在开发和放大器上使用相同的RUBY_PATCHLEVEL。 prod服务器。

使用以下行在应用程序的主文件夹中创建名为.rvmrc的文件:

rvm use 1.9.3-p125

这会使项目使用指定的补丁版本。

当然,这意味着您必须在本地安装1.9.3-p125版本; rvm正是为了这个目的 - 在本地机器上管理多个版本的ruby。

我通常还有项目特定的gemsets,我的.rvmrc文件如下所示:

rvm_gemset_create_on_use_flag=1
rvm use <ruby version>@<gemset name ; usually the project name>

示例

rvm_gemset_create_on_use_flag=1
rvm use 1.9.3@myblog