Tag: rails postgresql

如何增加rails gem中的字段?

我收到这个错误: SQL (31.1ms) INSERT INTO “read_marks” (“readable_id”, “readable_type”, “timestamp”, “user_id”) VALUES ($1, $2, $3, $4) RETURNING “id” [[“readable_id”, nil], [“readable_type”, “PublicActivity::ORM::ActiveRecord::Activity”], [“timestamp”, Mon, 04 Mar 2013 03:29:52 UTC +00:00], [“user_id”, 2]] PG::Error: ERROR: value too long for type character varying(20) 因为“readable_type”只包含20个字符,所以我传入“PublicActivity :: ORM :: ActiveRecord :: Activity”。 这与使用gem未读的public_activity (显然解决了问题,但没有说明如何(见他的底部更新))相同的问题

设计:新用户注册问题,PG :: ProtocolViolation。 Rails4,Postgres

我正在使用devise和omni-auth登录linkedin。 我将from_omniauth方法添加到Railscast中提到的用户模型: 这是代码: #Create a new user if does not exist def self.from_omniauth(auth) where(auth.slice(:provider, :uid)).first_or_create! do |user| user.provider = auth.provider user.uid = auth.uid user.email = auth.info.email end end Started GET “/users/auth/linkedin/callback?oauth_token=XXX” INFO — omniauth: (linkedin) Callback phase initiated. Processing by OmniauthCallbacksController#linkedin as HTML (0.4ms) BEGIN User Exists (0.6ms) SELECT 1 AS one FROM “users” WHERE […]

迁移失败:PG :: ProtocolViolation Rails

我刚刚更新到rails4并意识到我的db角色和数据库不知何故没有设置。 所以我删除了数据库并重新创建了app_development数据库和角色。 现在我正在尝试运行rake db:migrate并且它失败并出现以下错误: == DeviseCreateUsers: migrating ============================================== — create_table(:users) -> 0.0081s — add_index(:users, :email, {:unique=>true}) -> 0.0031s — add_index(:users, :reset_password_token, {:unique=>true}) -> 0.0030s == DeviseCreateUsers: migrated (0.0144s) ===================================== rake aborted! An error has occurred, this and all later migrations canceled: PG::ProtocolViolation: ERROR: bind message supplies 1 parameters, but prepared statement “a1” requires 0 : […]

如何将ActiveRecord模型属性从json迁移到jsonb?

迁移应该是什么样的? 我想利用jsonb数组查询技术。

为什么我的Rails 4 / Postgres中的所有表都以1的“维度”创建?

我试图用Postgres在Rails 4中进行基本的模型生成和迁移,我遇到了很多问题。 我安装了pg gem,版本为0.17.1 。 在开始时,我甚至无法无错误地运行迁移,因为schema_migrations表是使用维度为1的version列创建的。 一旦我手动将其更改为零,它工作正常。 现在,如果我查看由于使用Rails模型生成器而导致的所有迁移,我会看到每个列(每个表中的id列除外)都是使用dimension 1创建的。 我需要更改一些默认设置吗? 这是不正确的,我搞乱别的东西? 这是我的第一个Rails 4项目,所以我只想弄清楚为什么它希望所有这些列都默认为一个数组。 这是我的一个迁移文件: class CreateCatalogs < ActiveRecord::Migration def change create_table :catalogs do |t| t.string :name t.text :description t.string :schema_name t.string :catalog_type t.boolean :billable t.timestamps end end end 这是来自schema.rb : create_table “catalogs”, force: true do |t| t.string “name”, array: true t.text “description”, array: true t.string […]

Rake任务似乎忽略了database.yml配置

我正在使用MAC OS X以及通过Homebrew安装的postgresql。 我正在开发使用Rails 4.2.1和ruby 2.2.0。 与postgresql服务器的连接很好,但由于某种原因,每个应用程序都访问数据库“kstavrou”,这是我的系统用户名,作为开发数据库,​​并创建数据库.yml定义的其余部分。 如果你有超过1个rails应用程序,这很麻烦。 rake db:创建输出: Konstantinoss-MacBook-Pro:ecomm-intel kstavrou $ rake db:create kstavrou已经存在 ecomm_intel_test已经存在 奇怪的是,如果我清空database.yml仍然可以很好地连接到postgresql并尝试再次创建数据库“kstavrou”执行所有迁移,而不尝试创建测试数据库。 rake db:创建输出: Konstantinoss-MacBook-Pro:ecomm-intel kstavrou $ rake db:create kstavrou已经存在 database.yml的 default: &default adapter: postgresql host: localhost encoding: utf8 username: pguser password: 123456 pool: 5 production: <<: *default database: ecomm_intel_prod development: <<: *default database: ecomm_intel_dev test: <<: *default database: […]

新分配的序列不起作用

在PostgreSQL中,我创建了一个新表并为id列分配了一个新序列。 如果我从PostgreSQL控制台插入一条记录它可以工作,但是当我尝试从Rails导入一个记录时,它会引发一个exception,它无法找到相关的序列。 这是表格: \d+ user_messages; Table “public.user_messages” Column | Type | Modifiers | Storage | Description ————-+—————————–+————————————————————+———-+————- id | integer | not null default nextval(‘new_user_messages_id’::regclass) | plain | 但是当我尝试使用Rails使用的SQL查询获取序列时,它返回NULL: select pg_catalog.pg_get_serial_sequence(‘user_messages’, ‘id’); pg_get_serial_sequence ———————— (1 row) Rails引发的错误是: UserMessage.import [UserMessage.new] NoMethodError: undefined method `split’ for nil:NilClass from /app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:910:in `default_sequence_name’ 仅当我使用ActiveRecord扩展名导入批量记录时,才会出现此问题,单个记录通过ActiveRecord保存。 我如何解决它?

Rails特定于数据库的数据类型

这是我第一次使用PostgreSQL试用Rails。 我对代码中timestamp with timezone使用timestamp with timezone的缺乏感到困惑,我通常会看到关于存储绝对时间的列。 一个主要的例子是设计 ,它将列存储为datetime列,该列转换为PostgreSQL中timestamp with out timezone的timestamp with out timezone 。 我认为这是一个不好的做法,因为timestamp with out timezone可能意味着任何时区。 如果您从另一个应用程序访问数据库,您将不知道时间戳引用的时区而不查看Rails。 它只是一个分散的混乱。 有没有办法让我在PostgreSQL的ActiveRecord迁移/模式中创建timestamp with time zone的timestamp with time zone ? 是否会与当前的Rails框架代码产生不兼容问题? 我理解ActiveRecord试图与数据库无关,但这只是一个我不能忽视的宠儿。

Rails不转换时区(PostgreSQL)

我有时区和postgresql数据库的问题(Rails 3.0.4,PostgreSQL 9.0)。 我正在使用自定义范围,其中我附加了一些条件,做了连接等.pp。 问题是,Rails不会将时间转换为我的本地时区。 以下是范围的代码: scope :with_activities_within_range_in_week, lambda{ |latMin, lngMin, latMax, lngMax, date| select(“date_trunc(‘day’, activities.starting_at) as date, count(activities.id) as value “) \ .within(latMin, lngMin, latMax, lngMax) \ .joins(:activities) \ .merge(Activity.in_week(date)) \ .group(“date”) \ .order(“date”) } within方法检查范围,Activity.in_week范围返回: where(“activities.starting_at >= ? AND activities.starting_at < ?", start, stop) 在select语句中,我想将starting_at字段截断为day。 我得到日期字段的以下输出: 2011-04-07 18:48:32 2011-04-02 14:07:20 2011-04-02 14:06:49 不幸的是,它不包括时区。 […]

每当我创建一个新的rails应用程序时,如何创建Postgres用户和数据库?

我已经按照这个非常有用的教程: Setting up PostgreSQL for Ruby on Rails development on OS X 我真的想运行rails new myapp并自动设置postgres数据库。 有什么办法可以使用Rails应用程序模板或类似的东西吗?