Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 连接到谷歌日历';通过Rails的API_Ruby On Rails_Ruby_Google Api_Google Calendar Api_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails 连接到谷歌日历';通过Rails的API

Ruby on rails 连接到谷歌日历';通过Rails的API,ruby-on-rails,ruby,google-api,google-calendar-api,ruby-on-rails-5,Ruby On Rails,Ruby,Google Api,Google Calendar Api,Ruby On Rails 5,我正在创建一个非常简单的Rails应用程序,它有一个特定的用途:向Google日历帐户添加日历事件 我在跟踪调查 我能够运行提供的测试代码(仅限Ruby,没有框架),但我很难从Rails项目访问凭据,我不确定如何正确地(“惯用的”?)操作和组织项目 这个过程的一部分是使用OAuth2.0,因为这个目标需要访问Google用户的私有数据(读和写),所以我按照说明进行操作 现在,关于最佳实践和/或组织代码的正确方式,我有几个不同的问题: Google提供了一个client_secret.json,它

我正在创建一个非常简单的Rails应用程序,它有一个特定的用途:向Google日历帐户添加日历事件

我在跟踪调查

我能够运行提供的测试代码(仅限Ruby,没有框架),但我很难从Rails项目访问凭据,我不确定如何正确地(“惯用的”?)操作和组织项目

这个过程的一部分是使用OAuth2.0,因为这个目标需要访问Google用户的私有数据(读和写),所以我按照说明进行操作

现在,关于最佳实践和/或组织代码的正确方式,我有几个不同的问题:

  • Google提供了一个client_secret.json,它具有访问应用程序的凭据。我应该把它放在哪里?我是否应该将其保存在开发环境中的.env文件中,以及(在我的例子中)生产环境中Heroku的env VARS中

  • 我尝试将client_secret.json文件保存在项目的根文件夹中(与Gemfile路径相同),将其添加到.gitignore中,但无法
    要求“#{Rails.root}/client_secret.json”

  • 我创建了一个
    services/
    文件夹,将与谷歌日历相关的代码放入其中,但我不确定是否应该将其放入控制器中。我应该如何组织这个

  • 重要考虑事项: 我没有使用任何其他身份验证/授权方法,如Desive或其他方法,我现在也不打算这样做。我只想得到谷歌的授权令牌,并创建一个日历事件


    我能够理解这一点,并将发布以下每个问题的答案:

  • 对于client_secret.json,文件是
    config/client_secret.json
    。 在Heroku交付生产时,使用ENV VAR

  • Require不是在json文件中导入凭据的适当方式。 使用
    Google::APIClient::ClientSecrets.load(File.join(Rails.root,'config','client\u secret.json'))
    (假设文件确实在
    config/
    中)

  • 至于如何组织代码,我最终创建了一个服务文件夹和一个包含授权逻辑的google_calendar.rb类

  • 代码如下:

    app/services/google_calendar.rb

    要求“google/api\u客户端/客户端\u机密”
    需要“google/API/calendar\u v3”
    谷歌日历
    #属性访问器(属性写入器+属性读取器)
    属性访问器:身份验证客户端,:身份验证uri,:代码
    def初始化
    #环境:发展
    #Google的API凭据位于~/config/client_secret.json中
    client\u secrets=Google::APIClient::ClientSecrets.load(File.join(Rails.root,'config','client\u secret.json'))
    @auth\u client=客户机密.to\u授权
    #指定权限和回调URL
    @auth_client.update(
    :scope=>'https://www.googleapis.com/auth/calendar',
    :重定向_uri=>'http://localhost:3000/oauth2callback'
    )
    #建立重定向URL
    @auth\u uri=@auth\u client.authorization\u uri.to\u s
    结束
    结束
    
    app/controllers/application\u controller.rb

    class ApplicationController
    /Users/jsoifer/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require': No such file to load -- /Users/jsoifer/Developer/Tiny-Things/tiny-booking/client_secret.json (LoadError)