将二进制 gems 部署到不同的平台
-
07-07-2019 - |
题
我有一个需要部署的 Rails 应用程序。以下是事实:
- 该应用程序是在 Windows 上开发的,需要 Windows 二进制 gem
- 该应用程序将部署到 Open Solaris 共享服务器 (Joyent)
- 我没有权限在服务器上安装 gems
- 对于非二元宝石,我可以简单地做一个
rake gems:unpack
本地然后上传;这很好用。
所以我的问题是,我如何获得 二进制 我需要将 gem 放到我的生产服务器上吗?
解决方案
- 该应用程序是在 Windows 上开发的,需要 Windows 二进制 gem
- 该应用程序将部署到 Open Solaris 共享服务器 (Joyent)
您确实意识到无法在开放的Solaris 上运行Windows 二进制文件。Windows实际上与solaris完全不同......
如果 gems 来自第三方,您也许可以下载其他人生成的适用于 Solaris 的预打包二进制版本。然后,您可以将它们放在供应商目录中并从那里加载它们,而不是安装 gem。
如果您无法获得Solaris 的预打包二进制文件,则需要获得自己的Solaris 机器(使用Virtual PC、VMWare、VirtualBox 等),用它来编译gems,然后提取二进制文件。
如果您实际上只有可在 Windows 上运行的源代码(例如:你自己构建了它,或者提供 gem 的人仅将其设计为在 Windows 上工作),你就完蛋了。您需要找到跨平台的替代品。
如果您能告诉我们会有帮助 哪个 您正在谈论的宝石,因此人们可以帮助找到更具体的解决方案,并准确解释发生了什么。
其他提示
请求共享服务器管理员为您安装 gem。如果它们是可从信誉良好的域获得的“标准”宝石,那么这确实不是什么大问题,我的共享服务器提供商一直在这样做。
二进制宝石才是真正的问题。对于所有其他宝石,您可以使用 vendor/gems
目录(仅适用于 Rails 2.1+)。
这有两件事。它使您的应用程序可以在不依赖于系统安装的 gem 的情况下进行部署,其次它将特定版本的 gem 冻结到您的应用程序。因此,如果其他人从您的 SCM 工具中检查这一点,他们将不会出现版本不匹配的情况,并且可以正常启动和运行。
祝你好运!
您可能必须使用交叉编译器来针对在 Windows 上运行的 Solaris。
构建交叉编译器通常是一个困难且容易出错的过程。我以前做过,而且复杂性不适合胆小的人。理想情况下,您会找到有权访问 Solaris 构建机器的人并让他们为您创建二进制文件。
如果您必须采用交叉编译器路线,我怀疑解决方案是安装 cygwin 并使用其构建工具来创建 cygwin 托管的 Solaris 交叉编译器。我建议看看 交叉工具 项目将为您提供为您处理一些细节的脚本。