Ruby 脚本无法加载通过捆绑程序安装的 gem
Ruby script cannot load a gem installed via bundler
我试图在我的 ruby 脚本中包含 ruby-mysql gem。我已经使用捆绑器安装了 gem,但是当我 运行 bundle exec ./mysql_connector
时,我收到错误 ./mysql_connector:4:in ``require': cannot load such file -- ruby-mysql (LoadError)
。你能帮我解决问题吗?
我做了什么
已安装 rails 在我的主目录中。
我没有服务器的 root 访问权限,所以我按照此处的说明在本地目录中安装了 rails:
http://www.r-bloggers.com/installing-ruby-on-linux-as-a-user-other-than-root/
为我的应用程序创建了一个目录。
我的应用程序驻留在我的主目录中名为 connector
的文件夹中。它有一个如下所示的 Gemfile:
source 'https://rubygems.org'
gem 'ruby-mysql'
致电bundle install
.
Using ruby-mysql 2.9.14
Using bundler 1.11.2
Bundle complete! 1 Gemfile dependency, 2 gems now installed.
Bundled gems are installed into ./vendor/bundle.
向我的脚本添加依赖项。我的脚本在 connector/mysql_connector 中,它显示:
#!/home/dcox/bin/ruby
require 'rubygems'
require 'bundler/setup'
require 'ruby-mysql'
使脚本可执行。 我看到您需要 运行 bundle exec
使用可执行文件,所以我按照此处的说明制作我的脚本可执行文件:http://commandercoriander.net/blog/2013/02/16/making-a-ruby-script-executable/
运行 脚本。 我使用 bundle exec mysql_connector
执行并查看:
/home/dcox/bin/mysql_connector:4:in `require': cannot load such file -- ruby-mysql (LoadError)
from /home/dcox/bin/mysql_connector:4:in `<main>'
是$LOAD_PATH吗?四处寻找答案后,我发现了很多SO答案以及博客post(https://codedecoder.wordpress.com/2013/09/23/require-and-load-in-ruby-loaderror-cannot-load-such-file/) 似乎表明问题是 gem 没有安装在 $LOAD_PATH 上的目录中。这是我从 IRB 运行 $LOAD_PATH
看到的:
irb(main):002:0> $LOAD_PATH
=> ["/home/dcox/lib/ruby/site_ruby/2.1.0",
"/home/dcox/lib/ruby/site_ruby/2.1.0/x86_64-linux",
"/home/dcox/lib/ruby/site_ruby", "/home/dcox/lib/ruby/vendor_ruby/2.1.0",
"/home/dcox/lib/ruby/vendor_ruby/2.1.0/x86_64-linux",
"/home/dcox/lib/ruby/vendor_ruby", "/home/dcox/lib/ruby/2.1.0",
"/home/dcox/lib/ruby/2.1.0/x86_64-linux"]
接下来我查看了 ruby-mysql 的位置:
dcox@analytics1:~/connector$ bundle show ruby-mysql
/data/home/dcox/connector/vendor/bundle/ruby/2.1.0/gems/ruby-mysql-2.9.14
显然我的 connector/vendor/bundle
路径不在 $LOAD_PATH 上。我可以添加它,但我觉得我在这里遗漏了一些简单的东西,因为只要您按照说明进行操作,捆绑器就应该可以工作,对吗?
非常感谢任何建议或帮助!谢谢!!
您的文件应调用 Bundler.setup
http://bundler.io/bundler_setup.html
更好的是,如果您改为调用 Bundler.require(:default)
,它将为您设置并需要 Gemfile 中的所有 gem。
如果您只想要求这个特定的 gem,require 'mysql'
应该可以(例如,https://github.com/tmtm/ruby-mysql/blob/master/test/test_mysql.rb#L10)。
我试图在我的 ruby 脚本中包含 ruby-mysql gem。我已经使用捆绑器安装了 gem,但是当我 运行 bundle exec ./mysql_connector
时,我收到错误 ./mysql_connector:4:in ``require': cannot load such file -- ruby-mysql (LoadError)
。你能帮我解决问题吗?
我做了什么
已安装 rails 在我的主目录中。 我没有服务器的 root 访问权限,所以我按照此处的说明在本地目录中安装了 rails: http://www.r-bloggers.com/installing-ruby-on-linux-as-a-user-other-than-root/
为我的应用程序创建了一个目录。
我的应用程序驻留在我的主目录中名为 connector
的文件夹中。它有一个如下所示的 Gemfile:
source 'https://rubygems.org'
gem 'ruby-mysql'
致电bundle install
.
Using ruby-mysql 2.9.14
Using bundler 1.11.2
Bundle complete! 1 Gemfile dependency, 2 gems now installed.
Bundled gems are installed into ./vendor/bundle.
向我的脚本添加依赖项。我的脚本在 connector/mysql_connector 中,它显示:
#!/home/dcox/bin/ruby
require 'rubygems'
require 'bundler/setup'
require 'ruby-mysql'
使脚本可执行。 我看到您需要 运行 bundle exec
使用可执行文件,所以我按照此处的说明制作我的脚本可执行文件:http://commandercoriander.net/blog/2013/02/16/making-a-ruby-script-executable/
运行 脚本。 我使用 bundle exec mysql_connector
执行并查看:
/home/dcox/bin/mysql_connector:4:in `require': cannot load such file -- ruby-mysql (LoadError)
from /home/dcox/bin/mysql_connector:4:in `<main>'
是$LOAD_PATH吗?四处寻找答案后,我发现了很多SO答案以及博客post(https://codedecoder.wordpress.com/2013/09/23/require-and-load-in-ruby-loaderror-cannot-load-such-file/) 似乎表明问题是 gem 没有安装在 $LOAD_PATH 上的目录中。这是我从 IRB 运行 $LOAD_PATH
看到的:
irb(main):002:0> $LOAD_PATH
=> ["/home/dcox/lib/ruby/site_ruby/2.1.0",
"/home/dcox/lib/ruby/site_ruby/2.1.0/x86_64-linux",
"/home/dcox/lib/ruby/site_ruby", "/home/dcox/lib/ruby/vendor_ruby/2.1.0",
"/home/dcox/lib/ruby/vendor_ruby/2.1.0/x86_64-linux",
"/home/dcox/lib/ruby/vendor_ruby", "/home/dcox/lib/ruby/2.1.0",
"/home/dcox/lib/ruby/2.1.0/x86_64-linux"]
接下来我查看了 ruby-mysql 的位置:
dcox@analytics1:~/connector$ bundle show ruby-mysql
/data/home/dcox/connector/vendor/bundle/ruby/2.1.0/gems/ruby-mysql-2.9.14
显然我的 connector/vendor/bundle
路径不在 $LOAD_PATH 上。我可以添加它,但我觉得我在这里遗漏了一些简单的东西,因为只要您按照说明进行操作,捆绑器就应该可以工作,对吗?
非常感谢任何建议或帮助!谢谢!!
您的文件应调用 Bundler.setup
http://bundler.io/bundler_setup.html
更好的是,如果您改为调用 Bundler.require(:default)
,它将为您设置并需要 Gemfile 中的所有 gem。
如果您只想要求这个特定的 gem,require 'mysql'
应该可以(例如,https://github.com/tmtm/ruby-mysql/blob/master/test/test_mysql.rb#L10)。