Staging/Production 中未显示触发程序
Trigger Procedure Not Showing Up In Staging/Production
所以我的 structure.sql:
中有这个触发程序
CREATE FUNCTION dead_filter() RETURNS TRIGGER AS $dead_filter$
BEGIN
IF (NEW.all_votes > 6 AND NEW.non_skip_votes/NEW.all_votes::float < 0.56) THEN
NEW.dead := true;
RETURN NEW;
END IF;
RETURN NEW;
END;
$dead_filter$ LANGUAGE plpgsql;
CREATE TRIGGER dead_filter AFTER UPDATE ON statements
FOR EACH ROW
EXECUTE PROCEDURE dead_filter();
它在本地工作得很好,但出于某种原因它出现在我的暂存和生产服务器中!
两者都在 heroku 应用程序上运行,并且都有
config.active_record.schema_format = :sql
在他们的相关配置文件中。我在这里错过了什么?
select * from pg_trigger;
不包括我在 staging/production 上的触发器,但在本地,在开发中。
我是否需要 运行 重新读取 structure.sql 文件?后端绝对是我的弱点,所以如果有一些非常明显的事情我应该知道去做......很可能我不知道去做!
谢谢!
如评论所述,您需要创建一个添加触发器的迁移,并且 运行 此迁移在生产环境中运行,因为它在 Heroku 上不是自动的。另请注意,structure.sql
文件将在 运行 本地迁移或 rake db:schema:dump
等任务后重新生成。所以你不应该手动编辑这个文件。
所以我的 structure.sql:
中有这个触发程序CREATE FUNCTION dead_filter() RETURNS TRIGGER AS $dead_filter$
BEGIN
IF (NEW.all_votes > 6 AND NEW.non_skip_votes/NEW.all_votes::float < 0.56) THEN
NEW.dead := true;
RETURN NEW;
END IF;
RETURN NEW;
END;
$dead_filter$ LANGUAGE plpgsql;
CREATE TRIGGER dead_filter AFTER UPDATE ON statements
FOR EACH ROW
EXECUTE PROCEDURE dead_filter();
它在本地工作得很好,但出于某种原因它出现在我的暂存和生产服务器中!
两者都在 heroku 应用程序上运行,并且都有
config.active_record.schema_format = :sql
在他们的相关配置文件中。我在这里错过了什么?
select * from pg_trigger;
不包括我在 staging/production 上的触发器,但在本地,在开发中。
我是否需要 运行 重新读取 structure.sql 文件?后端绝对是我的弱点,所以如果有一些非常明显的事情我应该知道去做......很可能我不知道去做!
谢谢!
如评论所述,您需要创建一个添加触发器的迁移,并且 运行 此迁移在生产环境中运行,因为它在 Heroku 上不是自动的。另请注意,structure.sql
文件将在 运行 本地迁移或 rake db:schema:dump
等任务后重新生成。所以你不应该手动编辑这个文件。