ruby - 在 Windows 上的 JRuby 9.2.8.0 上安装 wdm gem
问题描述
我们正在将 Rails 项目从 2.3 转换为 5。
许多更改之一是启动消息:
Please add the following to your Gemfile to avoid polling for changes:
gem 'wdm', '>= 0.1.0' if Gem.win_platform?
尝试在我的 JRuby 9.2.8.0 安装中安装 gem 时,我得到:
checking for main() in -lkernel32... RuntimeError: The compiler failed to
generate an executable file.
You have to install development tools first.
...
To see why this extension failed to compile, please check the mkmf.log which can
be found here:
M:/workspace/installations/jruby-9.2.8.0/lib/ruby/gems/shared/extensions/universal-java-1.8/2.5.0/wdm-0.1.1/mkmf.log
该文件包含:
" -o conftest.exe -I/include/universal-java1.8 -IM:/workspace/installations/jruby-9.2.8.0/lib/ruby/include/ruby/backward -IM:/workspace/installations/jruby-9.2.8.0/lib/ruby/include -I. -fno-omit-frame-pointer -fno-strict-aliasing -fexceptions conftest.c -L. -LM:/workspace/installations/jruby-9.2.8.0/lib -LM:/workspace/installations/jruby-9.2.8.0/lib/native/x86_64-Windows -m64 -march=native -mtune=native "
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: #include <ruby.h>
4: int main(int argc, char **argv)
5: {
6: return 0;
7: }
/* end */
注意:我可以在 ruby 2.6.4p104(2019-08-28 修订版 67798)[x64-mingw32] 上安装 gem,但不能在我的 JRuby 安装中
关于如何安装这个 gem 的任何想法?
或者如果没有,我可以使用 wdm 的替代品吗?我注意到我的资产现在没有在开发中正确重新加载。
解决方案
第一个不再相关,因为 JRuby 现在确实支持 C 扩展。
这简直(不再)是真的:在 JRuby 1.6 周围实验性地支持 C 扩展,在 1.7 中删除过程(它们从未真正工作得那么好)开始并且 9.X 不支持它们。如今,大多数原生 gem 在 JRuby 上都有一个特定于 Java 的 ext 后端。
链接的问题试图在使用 JRuby 时确定 Java 特定版本,不幸的是它没有完成/合并,但您可以尝试补丁。
您需要使用禁用 C-ext 编译的补丁设置一个 fork 存储库。或者您可以禁用 JRuby 上的 gem(并在您的应用程序中处理“特定”后端代码):
gem 'wdm', '>= 0.1.0', platform: [:mri, :mswin]
推荐阅读
- c# - 如何在 Json 字符串中转义 Json 字符串
- javascript - 脚本仅在页面刷新后才起作用?不在初始导航上?
- django - graphene.Node 和 graphene.relay.Node 有什么区别?
- c++ - 使用 const 和 non-const 进行参数传递
- reactjs - event.stopPropagation 似乎阻止了 useState 更新和渲染
- c++ - 返回对类数据成员的引用,然后尝试更改该成员
- python-3.x - 这些块是否符合 PEP8?
- jquery - 我想在此代码中的计数器之前添加一个美元符号货币符号
- java - 如何在 Spring Boot 2 中保护具有角色的执行器端点?
- javascript - 如何从组件 A 调用组件 B 的函数