ruby-on-rails - 设置乘客和铁路时的知识差距

标签 ruby-on-rails ruby ubuntu nginx ruby-on-rails-4

我正在尝试设置乘客、Rails 和 Nginx。 Nginx 正确路由到Passenger,但是当我加载页面时出现以下错误:

cannot load such file -- bundler/setup (LoadError)
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:219:in `block in run_load_path_setup_code'
/usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:333:in `running_bundler'
/usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:217:in `run_load_path_setup_code'
/usr/share/passenger/helper-scripts/rack-preloader.rb:96:in `preload_app'
/usr/share/passenger/helper-scripts/rack-preloader.rb:150:in `<module:App>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:29:in `<module:PhusionPassenger>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:28:in `<main>'

我不明白的是:
  • 为什么有一堆对 Ruby 1.9.1 的引用?我默认使用 1.9.3,并且在全局 1.9.3 和用户特定的 1.9.3 上都安装了 Bundler。
  • 如何更改乘客运行的用户?
  • 我是否也应该在Passenger的用户中安装一堆 gem ?
  • 我是否需要授予 www-data(该乘客在 AFAIK 上运行)访问某个 gem 目录的权限?
  • 我应该增加 GEM_HOME 吗?如果是,我应该指向哪个 gem 目录?
  • 为什么在安装 nginx 乘客包期间没有进行此设置?

  • 我基本上到处都安装了 bundler,但肯定错过了一些重要的东西。
  • RVM 如何使事情复杂化?
  • 使用 RVM 时需要注意什么?
  • 系统中的每个用户是否都获得了我在 RVM 中设置的 Ruby 版本?如果没有,我怎么能做到这一点?

  • 我觉得我现在已经接近掌握整个事情了,但我自己却无法阅读解决方案。

    如果你去http://privateering.me:8000/您可以看到错误转储的其余部分。

    最佳答案

    现在是早上!我喝过咖啡!我们走吧!

    What I don't understand is why there are a bunch of references to ruby 1.9.1?



    正如 tessi 所提到的,对于 Ruby 1.9.3 的某些构建,路径中的 1.9.1 是正常的。这很奇怪和令人困惑,但它就是这样。这本身并不立即引起关注。

    Furthermore, how can I change which user passenger runs on?



    Phusion有一些很好的documentation for Phusion/Nginx其中包括所有配置参数。但这可能没有必要,因为 user-related docs会告诉你,Passenger 默认会尝试以拥有它的用户身份运行每个应用程序。

    Am I supposed to install a bunch of gems on passenger's user as well?



    也许。可能不是。看上面。只要有可能,就没有一个“乘客用户”。只有当用户切换不可用时,Passenger 才会回退到以单个用户身份运行(无论 nginx 配置什么)。

    Why isn't this setup during installation of the nginx passenger bundle?



    因为Passenger 只是一个 Multi-Tenancy 、多语言的应用程序服务器。它不知道您是在运行一个应用程序还是一百个应用程序,Ruby 或 Python,Rails 或 Sinatra 或 Merb 或自制的东西。乘客的工作是在你告诉它是什么后运行应用程序;你的工作是让每个应用程序进入可运行状态。

    How does RVM complicate things? What do I need to be aware of when using RVM? Does every user in the system get the ruby version I set in RVM? How can I make it so if not?



    RVM 使事情变得足够复杂。默认情况下,它以单用户为基础安装,并且仅影响单个用户。这正是它的预期用例:当我登录时,我想要一个不同的 Ruby 并且不想污染系统。由于 RVM 工作的特殊方式,还有其他复杂性。

    但是 Phusion 意识到有些人会出于任何原因在生产中使用 RVM and covers that situation in the installation documentation .

    通过将 RVM 排除在图片之外,可以轻松避免大多数涉及 RVM 和乘客的痛苦。除非您在一个非常奇特的平台上,否则构建现代 Ruby 是 ./configure && make && make install 的问题。 .一行代码,您就在 /usr/local 中获得了一个稳定的、系统范围的 Ruby。 ,您、乘客和其他所有人都可以轻松访问。

    关于ruby-on-rails - 设置乘客和铁路时的知识差距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19319812/

    相关文章:

    ruby-on-rails - Rails 6 中的根路由在哪里?

    ruby - 贡献 git 包的流程?

    git - 从另一个用户创建的另一个分支创建一个新分支

    ruby-on-rails - Nginx、Rails 和 Oauth。上游过早关闭连接

    ruby-on-rails - ActiveAdmin,现有(但裸露的)用户模型中的设计 2 不起作用

    ruby-on-rails - rails : How to send file from S3 to remote server

    macos - 执行此命令的 Mac OS X 方式是什么

    linux - 如何为 32 位嵌入式软件重新配置 Google Test?

    ruby-on-rails - Rails Strong Parameters - 如果我的字段之一是可选的怎么办?

    ruby-on-rails - rails 康康角色?