我有一个包含以下内容的Rakefile:
namespace :geo_data do
desc 'Imports geo data to Heroku'
task :heroku_import => :environment do
system "heroku pg:psql DATABASE -c 'DELETE FROM <table name>' -a <heroku app name>"
# some more stuff...
end
end每当我运行rake geo_data:heroku_import时,它都会在Heroku命令上崩溃,出现以下错误:
Ruby版本为1.9.3,但Gemfile指定了2.2.2
但是,如果我直接从终端窗口的命令行运行Heroku命令-- heroku pg:psql DATABASE -c 'DELETE FROM <table name>' -a <heroku app name> --它可以正常工作。
因此,看起来system命令使用的是不同版本的Ruby。
有趣的是,据我所知,我甚至没有在我的机器上安装1.9.3。这是rvm list的输出
rvm rubies
ruby-2.0.0-p598 [ x86_64 ]
ruby-2.2.0 [ x86_64 ]
=* ruby-2.2.2 [ x86_64 ]
# => - current
# =* - current && default
# * - default基于该输出,我没有安装1.9.3,2.2.2被设置为当前和默认的Ruby。
我确定system使用的是不同版本的Ruby是正确的吗,还是我缺少了其他的东西?如果它使用的是不同的版本,我如何使它使用2.2.2 (或者最好不管我的默认设置是什么)?
更新
这是我的Gemfile的内容:
source 'https://rubygems.org'
ruby '2.2.2'
gem 'rails', '4.2.3'
gem 'rails-api'
gem 'spring', :group => :development
gem 'pg'
gem 'stripe'
gem 'jsonapi-resources', '0.7.0'
gem 'rails_api_auth'
gem 'rack-cors', require: 'rack/cors'
gem 'activerecord-postgis-adapter'
gem 'rgeo-geojson'
gem 'geocoder'
gem 'activerecord-import'
gem 'sidekiq'
gem 'unicorn'
group :development, :test do
gem 'rspec-rails'
gem 'forgery'
gem 'foreman'
end
group :development do
gem 'pry-rails'
end发布于 2016-01-19 18:17:00
Ruby在启动时将检查一些环境变量,您可以使用这些变量来控制加载路径和设置选项。
Bundler具有“传染性”,因为当您使用它时,它会添加一些环境变量,以便另一个作为子进程执行的Ruby将自动尝试使用相同的Gemfile。
将ruby -e "puts ENV.inspect"的输出与使用Bundler的项目中的bundle exec ruby -e "puts ENV.inspect"进行比较。
这通常是您希望发生的事情,因此您总是使用在Gemfile中定义的Gems和Ruby版本。
heroku命令包括它自己安装的Ruby (在我的机器上是/usr/local/heroku/ruby ),它使用的是它而不是您的正常版本。这是Ruby的一个很旧的版本,我的版本是1.9.3p194。
因此,当您使用system运行heroku命令时,创建的Ruby检查环境变量并加载绑定程序(使用您使用的Ruby版本的Gem ),然后尝试根据您的Gemfile设置所有内容。这就是Ruby版本不匹配的地方。
要解决这个问题,您需要告诉Bundler在启动子进程时不要包含各种环境变量。有几种处理此问题的方法,在您的示例中,您希望使用Bundler.clean_system而不是普通的system。
Bundler.clean_system "heroku pg:psql DATABASE -c 'DELETE FROM <table name>' -a <heroku app name>"这将允许Heroku客户端在不受邦德勒和Gemfile干扰的情况下运行。
发布于 2015-12-29 16:39:15
发布于 2015-12-29 17:50:54
看看这里,How to fix "Your Ruby version is 1.9.3, but your Gemfile specified 2.0.0"。
试试ruby -v
我通过运行rvm install 2.2.2解决了这个问题。
https://stackoverflow.com/questions/34515005
复制相似问题