跨线程违反了rb_gc()(Cross-thread violation on rb_gc())

2019-09-16 14:18发布

我工作的代码库最近进行了升级,从红宝石1.9.2至1.9.3的Ruby和Rails的3.1到Rails 3.2.2。 由于我使用RVM我根本rvm install 1.9.3 ,我本来预计是一切是必要的。

当我运行

rails s

我得到的错误

[BUG]跨线程违反上rb_gc()

我发现了一些关于这个问题的链接。 有一个在计算器上 ,但它并没有真正给出答案。 最有希望的答案是对RVM网站 :

在这个我已经看到了迄今为​​止它一直结束了与C扩展红宝石宝石/库是针对不同的红宝石和/或建筑比一个试图加载它编译每一个案件。 尝试卸载重新安装和使用该应用程序使用,以追捕这buggar下来C扩展宝石。

这是相当有帮助的,但我的红宝石福是没有强大到足以知道哪些宝石有C扩展,哪些我应该尝试重新安装。 不少关于这个专题的其他环节似乎表明,JSON的宝石是有过错的,所以我尝试了建议的解决方案如下。

gem uninstall json 
gem install --platform=ruby

这并没有真正改变任何东西我,我仍然在试图启动Rails环境时,得到完全相同的错误。

如何追查这个问题?

如果有帮助,这里是宝石表的输出:

actionmailer (3.2.2)
actionpack (3.2.2)
activemodel (3.2.2)
activerecord (3.2.2)
activeresource (3.2.2)
activesupport (3.2.2)
addressable (2.2.7)
akami (1.0.0)
arel (3.0.2)
bcrypt-ruby (3.0.1)
bson (1.6.1)
bson_ext (1.6.1)
builder (3.0.0)
bundler (1.1.3, 1.0.21)
capybara (1.1.2)
carmen (0.2.13)
childprocess (0.3.1)
ci_reporter (1.7.0)
coderay (1.0.5)
coffee-rails (3.2.2)
coffee-script (2.2.0)
coffee-script-source (1.2.0)
commonjs (0.2.5)
cucumber (1.1.9)
cucumber-rails (1.3.0)
database_cleaner (0.7.2)
devise (2.0.4)
diff-lcs (1.1.3)
ejs (1.0.0)
email_spec (1.2.1)
engineyard (1.4.28)
engineyard-serverside-adapter (1.6.3)
erubis (2.7.0)
escape (0.0.4)
execjs (1.3.0)
factory_girl (3.0.0)
factory_girl_rails (3.0.0)
faker (1.0.1)
fakeweb (1.3.0)
ffi (1.0.11)
gherkin (2.9.3)
gyoku (0.4.4)
haml (3.1.4)
haml-rails (0.3.4)
hash-deep-merge (0.1.1)
highline (1.6.11)
hike (1.2.1)
httpi (0.9.6)
i18n (0.6.0)
jasmine (1.1.2)
jasmine-core (1.1.0)
jasminerice (0.0.8)
journey (1.0.3)
jquery-rails (2.0.1)
json (1.6.6)
json_pure (1.6.6)
kaminari (0.13.0)
kgio (2.7.4)
launchy (2.0.5)
less (2.1.0)
less-rails (2.2.0)
libv8 (3.3.10.4 x86_64-darwin-11)
log4r (1.1.10)
mail (2.4.4)
metaclass (0.0.1)
method_source (0.7.1)
mime-types (1.18)
mocha (0.10.5)
mongo (1.6.1)
mongoid (2.4.7)
mongoid-rspec (1.4.4)
multi_json (1.2.0)
net-ssh (2.2.2)
newrelic_rpm (3.3.3)
nokogiri (1.5.2)
nori (1.1.0)
open4 (1.3.0)
orm_adapter (0.0.7)
polyglot (0.3.3)
pr_geohash (1.0.0)
pry (0.9.8.4)
pry-highlight (0.0.1)
pry_debug (0.0.1)
rack (1.4.1)
rack-cache (1.2)
rack-ssl (1.3.2)
rack-test (0.6.1)
rails (3.2.2)
rails-footnotes (3.7.6)
railties (3.2.2)
raindrops (0.8.0)
rake (0.9.2.2)
rdoc (3.12)
recursive-open-struct (0.2.1)
rest-client (1.6.7)
rpm_contrib (2.1.8)
rsolr (1.0.7)
rspec (2.9.0)
rspec-core (2.9.0)
rspec-expectations (2.9.0)
rspec-mocks (2.9.0)
rspec-rails (2.9.0)
rubyzip (0.9.6.1)
sass (3.1.15)
sass-rails (3.2.5)
savon (0.9.9)
selenium-webdriver (2.20.0)
settings-tree (0.2.1)
simplecov (0.6.1)
simplecov-html (0.5.3)
simplecov-rcov (0.2.3)
slop (2.4.4)
spine-rails (0.1.0)
spork (1.0.0rc2)
sprockets (2.1.2)
sunspot (1.3.1)
sunspot_mongoid (0.4.1)
sunspot_rails (1.3.1)
sunspot_solr (1.3.1)
term-ansicolor (1.0.7)
therubyracer (0.10.1)
thor (0.14.6)
tilt (1.3.3)
treetop (1.4.10)
twitter-bootstrap-rails (2.0.6)
tzinfo (0.3.32)
uglifier (1.2.4)
unicorn (4.2.1)
warden (1.1.1)
wasabi (2.1.0)
xpath (0.1.4)

Answer 1:

以下是你可以尝试各种方法。

清理

要清理你的宝石的旧版本:

gem cleanup --dryrun

JSON

要暂时看是否JSON宝石的问题,交换机从JSON(本机),以JSON(纯Ruby),并改变你的Gemfile:

gem install json_pure 

天然宝石

你的宝石列表中有几个是弹出我的母语:

  • bcrypt
  • BSON
  • erubis
  • FFI(使很多本地连接)
  • 黄瓜之一种
  • kgio
  • 引入nokogiri
  • 雨滴
  • therubyracer(很多不可测的问题,恕我直言)
  • 独角兽

FFI

你的宝石ffi特别有趣的是-你碰巧知道你用它做什么?

ffi使Ruby代码调用本机代码,例如,如果你的Ruby应用程序的某些部分需要连接到本机库。

当你诊断你的问题,我想看看这个宝石第一。

生成文件

要找到任何你的宝石具有的Makefile文件,这是一个很好的指标,他们有本地代码:

find / | grep "/ruby/gems/" | grep Makefile

要找到所有的宝石,所以你可以将它们删除:

find / | grep "/ruby/gems/"

核弹RVM

核弹攻击RVM或其片段,您可以使用rvm uninstallrvm implode ,或此脚本核武器RVM和发现任何挥之不去件:

https://raw.github.com/SixArm/sixarm_unix_shell_scripts/master/rvm-uninstall-danger

尝试rbenv +打捆

我使用RVM使用rbenv +捆绑改变,这对我工作的伟大。

该rbenv工具是一个直接竞争对手RVM管理Ruby版本: https://github.com/sstephenson/rbenv

捆绑器管理gemsets和宝石依赖一个伟大的方式: http://gembundler.com/

酿造

如果你在Mac上使用的MacPorts,改为自制:

http://mxcl.github.com/homebrew/



Answer 2:

  1. :通过运行卸载JSON宝石的所有verions gem uninstall json

  2. 然后运行: gem install json --platform=ruby

  3. 再次运行包: bundle install



Answer 3:

你应该尝试的摧毁所有的宝石,并重新安装使用你的应用程序bundle的命令。

引述此错误RVM文档 :

尝试卸载重新安装和使用该应用程序使用,以追捕这buggar下来C扩展宝石。

该命令删除与RVM宝石很简单:

rvm uninstall


Answer 4:

RVM最新的干净重新安装是最好的选择。

rvm implode

rm -rf ~/.rvm

curl -L get.rvm.io | bash -s stable



Answer 5:

临睡前清洁红宝石/ RVM安装路径,你应该检查是否已删除红宝石1.8.7(这是默认安装在大多数分布)。 我相信这是我的一些宝石与1.9.2编译干扰(我认为这是本机的人之一)。 我完全删除使用1.8.7 apt-get的话,我做了一个新的RVM曲线(通过改变.rvmrc配置文件名称),然后跑了捆绑安装完全刷新所有的宝石。



文章来源: Cross-thread violation on rb_gc()