不能拆分':坏URI(不是URI?):

时间:2011-03-03 20:59:28

标签: ruby-on-rails ruby-on-rails-3 url mongodb carrierwave

我有以下CarrierWave初始化程序,可以在我的Heroku / MONGOHQ / GridFS环境中正常工作:

CarrierWave.configure do |config|
  config.storage = :grid_fs
  uri = URI.parse(ENV['MONGOHQ_URL'])
  config.grid_fs_database = File.basename(uri.path)
  config.grid_fs_host = uri.host unless uri.host.blank?
  config.grid_fs_port = uri.port unless uri.port.blank?
  config.grid_fs_username = uri.user unless uri.user.blank?
  config.grid_fs_password = uri.password unless uri.password.blank?
  config.grid_fs_access_url = '/gridfs'
  config.cache_dir = "uploads"
  config.root = Rails.root.join('tmp')
end

但是,当我尝试在本地运行代码时(在开发中),我收到以下错误:

`split': bad URI(is not URI?):  (URI::InvalidURIError)

这里是完整的堆栈:http://pastie.org/1630069我尝试在初始化程序之上添加require'ur / generic'但不起作用。

有人知道吗? 提前致谢 卢卡

3 个答案:

答案 0 :(得分:1)

另一种解决方案是在项目根目录中添加“.env”文件,并定义环境变量,如:

MONGOHQ_URL=mongodb://someuser:somepass@paulo.mongohq.com:10040/appid

答案 1 :(得分:0)

根据KenB的建议,ENV ['MONGOHQ_URL']未在我的本地机器开发环境中设置:

lsoave@ubuntu:~/rails/heroku/mp3upload$ rails c
Loading development environment (Rails 3.0.5)
ruby-1.9.2-p136 :001 > ENV['MONGOHQ_URL']
 => nil 
ruby-1.9.2-p136 :002 > 

这是一个没有初始化程序的分支,所以在我的本地机器上我不得不跳过它。我这样做了:

    if ENV['MONGOHQ_URL']
      CarrierWave.configure do |config|
        config.storage = :grid_fs
        uri = URI.parse(ENV['MONGOHQ_URL'])
        config.grid_fs_database = File.basename(uri.path)
        config.grid_fs_host = uri.host unless uri.host.blank?
        config.grid_fs_port = uri.port unless uri.port.blank?
        config.grid_fs_username = uri.user unless uri.user.blank?
        config.grid_fs_password = uri.password unless uri.password.blank?
        config.grid_fs_access_url = '/gridfs'
        config.cache_dir = "uploads"
        config.root = Rails.root.join('tmp')
      end
    end

我认为这应该是在启动过程中跳过Ralis 3.0.5初始化程序的一种更好的方法,有条件地跳转到ENV ['MONGOHQ_URL']参数值。

如果你有更好的方法,请分享一下吗? 非常感谢 :-) 卢卡

答案 2 :(得分:0)

在初始值设定项中,您可以执行此操作:MongoHQ Heroku docs

中指定的URI.parse(ENV['MONGOHQ_URL'] || 'some_other_link')