【问题标题】:Unable to get linecache19 on deployment server due to ruby patch versions being different on development and deployment server由于开发和部署服务器上的 ruby​​ 补丁版本不同,无法在部署服务器上获取 linecache19
【发布时间】:2012-10-20 05:38:17
【问题描述】:

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

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

【问题讨论】:

  • 查看stackoverflow.com/questions/6438116/…;在那里处理相同的错误回溯。
  • 我试过了,现在它可以在我的本地机器和服务器上运行,但是当使用 capistrano 进行部署时,它会失败并抛出在路径上找不到 gem 的错误。问题是本地机器上的 ruby​​ 补丁版本与远程主机上的不同
  • 酷。你能用新错误的完整堆栈跟踪更新问题吗?描述您所做的更改也会很有帮助。
  • 添加了这个问题的答案。注意:这与原来的问题完全不同;首选方法是添加一个新问题。

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


【解决方案1】:

使用'.rvmrc file 指定项目应在开发服务器和生产服务器上使用相同的 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

【讨论】:

    猜你喜欢
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    相关资源
    最近更新 更多