Heroku で 'DATABASE_URL' を変更する方法

結論

一度、heroku-postgresql を削除してから設定し直します。なお、削除の際はもちろん既存のデータは消えますので、別途予め救い出しておく必要があります*1

具体的な方法

以下、CLI を使うことを前提とします。GUI でも同等の操作が可能です。

1. heroku addons:destroy heroku-postgresql コマンドを実行する

$ heroku addons:destroy heroku-postgresql を実行して、以下のようにして heroku-postgresql を削除します。本当に削除していいのかの確認が出ますので、それに答えます。

$ heroku addons:destroy heroku-postgresql
 ▸    WARNING: Destructive Action
 ▸    This command will affect the app ANATANO-APP-NO-NAMAE
 ▸    To proceed, type ANATANO-APP-NO-NAMAE or re-run this command with
 ▸    --confirm ANATANO-APP-NO-NAMAE

> ANATANO-APP-NO-NAMAE
Destroying postgresql-contoured-13974 on ⬢ ANATANO-APP-NO-NAMAE... done

2. heroku config:set を実行して、DATABASE_URL を設定する

$ heroku config:set DATABASE_URL="hogehoge" を実行し、DATABASE_URL を設定します。以下に、設定例を示します。

$ heroku config:set DATABASE_URL="postgresql://USERNAME:PASSWORD@DATABASE_HOST/DATABASE_NAME"
Setting DATABASE_URL and restarting ⬢ ANATANO-APP-NO-NAMAE... done, v20
DATABASE_URL: postgresql://USERNAME:PASSWORD@DATABASE_HOST/DATABASE_NAME

*1:ここではその方法は省略します

Visual Studio Code の Ruby Test Explorer 拡張機能 において A Ruby Test Explorer failed to find an RSpec test suite. というエラーが出た場合の対処法

前提

Rails で RSpec を用いているものとします。

結論

bundle installbundle exec rails db:migrate などの初期設定が終わっていますか。

エラーメッセージに惑わされない

このエラーが出るときは、以下のようなメッセージも併せて書かれています。

Make sure RSpec is installed and your configured RSpec command is correct.

このメッセージを字面どおりにとらえ、RSpec がインストールされているかどうか確認したり、ディレクトリ指定を確認したり、ということを行っても、冒頭の解決策には到達しにくいです*1

ログを出力する

Ruby Test Explorer 拡張機能には、設定項目としてログを出力する場所を指定することができます*2。アプリケーション全体のグローバルなログファイルを設定するのではなく、ワークスペースごとにユニークな名前をつけるのがベターでしょう。

この内容を設定し、ログを出力するようにすれば原因を特定するのはたやすいです。デバッグの際はエラーメッセージとログをしっかりと確認する(流し読みをしない)、という原則はここでも大事であると思います。

*1:単なる Syntax Error でもこの表示が出ることがあります

*2:コンソールに吐き出すこともできます

webpack で bundle したファイルの中で dotenv を使う場合には dotenv-webpack を用いる必要がある

結論

標題のままとなります。dotenv を用いているファイルを webpack で bundle した場合、そのままですと dotenv が用いられません。そのため、dotenv-webpack を用いる必要があります。

やり方

1. dotenv-webpack をインストールします

--dev オプションを付けてよいですが、ここでは割愛します。

$ npm install dotenv-webpack

または

$ yarn add dotenv-webpack

2. webpack.config.js に設定を書く

require してから、plugins: に書き加えます。以下のようになります。

const Dotenv = require('dotenv-webpack');

module.exports = {
  (省略)
  plugins: [new Dotenv()]
  (省略)
};

感想

webpack 難しすぎ……。

YouTube Data API v3 を用いて動画をアップロードする際に、非公開あるいは限定公開にする方法

結論

privacyStatusprivate または unlisted を指定します。

  • private は「非公開」です
  • unlisted は「限定公開」です。

公式ドキュメント

注意

Ruby での実装では privacyStatus の指定の際のキーが privacy_status とスネークケースになるので注意が必要です*1。端折ったコードになりますが、以下のように指定することになります。

def upload_video
  snippet = {
    snippet: {
      title: '動画のタイトル',
      description: '動画の説明文',
      privacy_status: 'private'
    }
  }

  # @youtube は、認証を済ませたクライアントのオブジェクト(詳細は略)
  @youtube.insert_video(
    'snippet',
    snippet,
    upload_source: '/path/to/file',
    content_type: 'video/*'
  )
end

*1:おそらく他言語でもそれぞれの言語の規約に則った形式になると思われます

YouTube Data API v3 を用いて非公開ビデオの情報を取得するためのポイント

前提

OAuth での認証は終えているものとします。

結論

forMinetrue に指定し、かつ、channelId指定しない

説明

forMinetrue にすればいいことは ドキュメント を読めば分かると思います。しかし、その際に channelId を、例え自分のものであれ設定すると下記のようなエラーになります。Ruby 実装での例です。

invalidSearchFilter: The request contains an invalid combination of search filters and/or restrictions. Note that you must set the <code>type</code> parameter to <code>video</code> if you set either the <code>forContentOwner</code> or <code>forMine</code> parameters to <code>true</code>. You must also set the <code>type</code> parameter to <code>video</code> if you set a value for the <code>eventType</code>, <code>videoCaption</code>, <code>videoCategoryId</code>, <code>videoDefinition</code>, <code>videoDimension</code>, <code>videoDuration</code>, <code>videoEmbeddable</code>, <code>videoLicense</code>, <code>videoSyndicated</code>, or <code>videoType</code> parameters. (Google::Apis::ClientError)

つまり、特定のオプションの組み合わせだとエラーになるということです。そしてその組み合わせに該当しているということです。

補足

そして当たり前のことですが、非公開ビデオを見られるアカウントで認証をしたクライアントのオブジェクトにおいて、上記操作を行う必要があります。

私はもろもろあって、ちょっとハマってしまいました。

Powered by はてなブログ