You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails Active Admin中初始化BigQuery对象报错:undefined method `new'

解决Active Admin中Google Cloud BigQuery初始化错误:undefined method 'new' for Google::Cloud::Bigquery:Module

错误原因

你使用的google-cloud-bigquery 0.20.1是一个较早的版本,该版本的API设计和后续新版本存在差异——Google::Cloud::Bigquery模块并没有提供new方法来初始化客户端实例,正确的初始化入口是Google::Cloud.bigquery这个顶层方法。

修改后的代码

以下是调整后的Active Admin资源代码,重点修正了BigQuery客户端的初始化逻辑:

ActiveAdmin.register BabyName do
  require 'google/cloud/bigquery'
  permit_params :name, :gender

  controller do
    def create
      if baby_name = BabyName.create(name: permitted_params[:baby_name][:name], gender: permitted_params[:baby_name][:gender])
        # 用Rails.root确保密钥文件路径正确,避免相对路径导致的文件找不到问题
        keyfile = Rails.root.join('123.json')
        creds = Google::Cloud::Bigquery::Credentials.new(keyfile)
        
        # 替换原有的Google::Cloud::Bigquery.new为Google::Cloud.bigquery方法
        bigquery = Google::Cloud.bigquery(
          project_id: 'myproject',
          credentials: creds
        )

        p bigquery.project_id #=> 'my-project'
        dataset = bigquery.create_dataset 'baby'
        table = dataset.create_table 'baby_names' do |schema|
          schema.string 'name', mode: :required
          schema.string 'gender', mode: :required
          schema.integer 'count', mode: :required
        end
        # 同样用Rails.root处理数据文件路径
        file = File.open(Rails.root.join('names/yob2014.txt'))
        table.load file, format: 'csv'

        redirect_to admin_baby_name_path(baby_name.id), notice: 'Baby Name saved successfully!!'
      else
        render 'new'
      end
    end
  end
end

额外注意事项

  • 确保123.json密钥文件和names/yob2014.txt数据文件的路径正确,使用Rails.root.join可以避免不同环境下相对路径不一致的问题。
  • 如果后续计划升级google-cloud-bigquery到1.x及以上版本,就可以改用Google::Cloud::Bigquery.new的初始化方式,但升级时需要留意API的其他兼容变化。

内容的提问来源于stack exchange,提问作者Amal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 18:52:42