1

我的目标是让生产机器运行 Ruby on Rails 应用程序。然而,这台生产机器由 Plesk 管理,只允许非常基本的访问,但承诺能够运行 Ruby on Rails 应用程序。

实际上,对于一个过于简单的示例来说,原则上它可以在 Rails 上运行 Ruby,但是运行任何需要带有本机扩展的 gem 的应用程序(例如 nokogiri,rails 默认应用程序已经需要它,由 生成rails new)已经失败。

部分日志如下所示:

libruby.so.2.4: cannot open shared object file: No such file or directory - /var/www/vhosts/hosting116285.a2f45.netcup.net/test.gcsb.info/vendor/bundle/ruby/2.4.0/gems/msgpack-1.2.6-x86_64-linux/lib/msgpack/msgpack.so (LoadError)
/var/www/vhosts/hosting116285.a2f45.netcup.net/test.gcsb.info/vendor/bundle/ruby/2.4.0/gems/msgpack-1.2.6-x86_64-linux/lib/msgpack.rb:11:in `require'
...
...
...
/var/www/vhosts/hosting116285.a2f45.netcup.net/test.gcsb.info/vendor/bundle/ruby/2.4.0/gems/rack-2.0.6/lib/rack/builder.rb:55:in `initialize'
config.ru:1:in `new'
config.ru:1:in `<main>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:110:in `eval'
/usr/share/passenger/helper-scripts/rack-preloader.rb:110:in `preload_app'
/usr/share/passenger/helper-scripts/rack-preloader.rb:156:in `<module:App>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:30:in `<module:PhusionPassenger>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:29:in `<main>'

我可以选择“重新启动应用程序”、“安装包”(bundle install --path vendor/bundle根据文档执行)和“添加环境变量”。

我对机器的 SSH 访问权限非常有限,但无法访问任何编译器或库。

支持人员建议我“预编译我的 gem”,但没有给出任何具体建议。我设置了一个虚拟开发机器,它有点接近生产机器,但在所有路径和例如 Linux 内核版本方面绝对不一样。我使用 gem-compiler ( https://github.com/luislavena/gem-compiler ) 进行编译,它应该可以正常工作,但预编译的 gem 位于 bundle/cache 中,并通过 Plesk 界面安装它们。

但是,该应用程序不断抛出错误。预编译的 gem(msgpack是其中之一;最初带有本机扩展)似乎以错误的方式链接?老实说,我已经不知道了。我已经尝试将我的开发机器打包libruby.so.2.4到生产机器上,这稍微减少了错误,但无助于解决它。

您对规避给定限制的明智策略有什么建议吗?我做得对吗,但根本不可能让它在这种环境中运行?

提前致谢!
罗伯特

4

0 回答 0