0

按照有关此 stackoverflow 的说明进行操作后,我能够使其在本地计算机上运行。我什至在部署服务器上安装了 gems,并且可以在本地运行服务器。

带有 ruby​​-debugger 的 Rails 抛出“找不到符号:_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。我怎样才能解决这个问题?

4

1 回答 1

0

使用'.rvmrcfile指定项目应该在 dev 和 prod 服务器上使用相同的 RUBY_PATCHLEVEL。

.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
于 2012-10-20T19:24:01.467 回答