按照此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。我该如何解决这个问题?
答案 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