小编Geo*_*ann的帖子

使用Capistrano开始后台任务

对于我的RubyOnRails-App,我必须在Capistrano部署结束时开始后台工作.为此,我在deploy.rb中尝试了以下内容:

run "nohup #{current_path}/script/runner -e production 'Scheduler.start' &", :pty => true
Run Code Online (Sandbox Code Playgroud)

有时它可以工作,但大多数情况下它不会启动过程(=未在ps -aux中列出).并且没有错误消息.没有nohup.out,不在主目录中,也不在rails app目录中.

我尝试在scheduler.rb而不是nohup中使用trap('SIGHUP','IGNORE'),但结果是一样的.

让它工作的唯一方法是删除":pty => true"并在"cap deploy"结束时执行手动Ctrl-C.但我不喜欢这个......

还有其他机会调用此Scheduler.start吗?或者获取更多错误消息?

我在服务器上使用Rails 2.3.2,Capistrano 2.5.8,Ubuntu Hardy

background capistrano ruby-on-rails nohup

19
推荐指数
3
解决办法
7341
查看次数

在MySQL数据库中为表创建触发器(语法错误)

我无法定义MySQL数据库的触发器.我想在插入新行之前更改文本字段(在给定条件下).这是我尝试过的:

CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue
FOR EACH ROW BEGIN
  IF (NEW.sHeaders LIKE "%support@mydomain.com%") THEN
    SET NEW.sHeaders = NEW.sHeaders + "BCC:internal@mydomain.com";
  END IF;
END; 
Run Code Online (Sandbox Code Playgroud)

但总是我得到错误"错误的语法".我卡住了,我做错了什么?我正在使用MySQL 5.0.51a-community

顺便说一句:创建一个像这样的空触发器工作正常:

CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue
FOR EACH ROW BEGIN
END; 
Run Code Online (Sandbox Code Playgroud)

但这也失败了:

CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue 
FOR EACH ROW BEGIN
  IF 1=1 THEN
  END IF; 
END;
Run Code Online (Sandbox Code Playgroud)

这是我第一次使用stackoverflow.com,所以如果在这里发布内容有帮助我会非常兴奋:-)

mysql sql triggers

17
推荐指数
1
解决办法
2万
查看次数

Ransack:如何使用现有范围?

将Rails 2应用程序转换为Rails 3,我必须替换gem searchlogic.现在,使用Rails 3.2.8和gem Ransack我想构建一个使用现有范围的搜索表单.例:

class Post < ActiveRecord::Base
  scope :year, lambda { |year| 
    where("posts.date BETWEEN '#{year}-01-01' AND '#{year}-12-31'") 
  }
end  
Run Code Online (Sandbox Code Playgroud)

据我所知,这可以通过定义自定义搜索来实现.可悲的是,我没有找到任何关于此的文档.我在Post课堂上尝试过这个:

ransacker :year, 
          :formatter => proc {|v| 
            year(v)
          }
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

Post.ransack(:year_eq => 2012).result.to_sql
=> TypeError: Cannot visit ActiveRecord::Relation
Run Code Online (Sandbox Code Playgroud)

我尝试了ransacker声明的一些变体,但它们都不起作用.我需要一些帮助...

更新:上面的范围只是示例.我正在寻找一种方法来使用Ransack中的每个现有范围.在Ransack的前身MetaSearch中,有一个要求search_methods使用范围的功能.Ransack 尚未支持此开箱即用.

ruby-on-rails arel ruby-on-rails-3 ransack

14
推荐指数
2
解决办法
9169
查看次数

Rails:由于按下后退按钮而防止重复插入并再次保存

想想一个简单的Rails脚手架应用程序,其中包含一个表单,用于通过"保存"按钮将记录添加到数据库中.在"创建"操作之后,控制器重定向到"显示"操作,用户可以使用"编辑"链接编辑刚刚插入的记录.到目前为止,这么简单.

但是,如果用户在创建记录后使用浏览器的后退按钮返回"新"操作,则浏览器会显示包含用户刚刚输入的值的表单.现在他改变了一些值并再次按下"保存".他认为这会改变记录,但当然这会创造一个新记录.

防止此类重复条目的首选方法是什么?我正在寻找一个通用的解决方案,可能基于cookie或JavaScript.

browser controller ruby-on-rails crud

8
推荐指数
2
解决办法
5244
查看次数

Vuetify:如何预先选择活动选项卡?

我想使用Vuetify(v1.0.18)使用v-tabs呈现一些静态导航。路由是在服务器端完成的,所以我需要一种通过属性设置活动选项卡的方法。这是一项非常基本的任务,但我无法使其正常工作。例:

<v-tabs>
  <v-tab href="/path1">Tab 1</v-tab>
  <v-tab href="/path2">Tab 2</v-tab>
</v-tabs>
Run Code Online (Sandbox Code Playgroud)

这将预选择第一个标签-很好。

现在的问题是:如何预先选择第二个标签?以下就不能正常工作:

<v-tabs value="tab2">
  <v-tab id="tab1" href="/path1">Tab 1</v-tab>
  <v-tab id="tab2" href="/path2">Tab 2</v-tab>
</v-tabs>
Run Code Online (Sandbox Code Playgroud)

vue.js vuetify.js

8
推荐指数
5
解决办法
1万
查看次数

Stripe Checkout Beta:避免每次付款都创建新客户

我正在使用Stripe Checkout Beta构建 Rails 应用程序。为此,我Stripe::Checkout::Session在服务器上创建一个,redirectToCheckout在前端使用,然后等待 webhook 传入,类型checkout_beta.session_succeeded告诉我付款已完成。这工作正常,但是:

对于每笔付款,Stripe 都会创建一个客户 - 这不是我想要的。如果现有客户第二次付款,Stripe 不应创建新客户,新付款应链接到现有客户。

在重定向到 Checkout 之前如何设置客户 ID?

这是我的 Ruby控制器代码:

# app/controllers/payments_controller.rb

def new
  @session = Stripe::Checkout::Session.create(
    success_url: "https://shop.example.test/success",
    cancel_url: "https://shop.example.test/cancelled",
    payment_method_types: ["card"],
    line_items: cart_items.map do |cart_item|
      {
        name: cart_item.name,
        quantity: 1,
        amount: cart_item.name.price.cents,
        currency: 'eur'
      }
    end,
    customer_email: current_user.email
  )
end
Run Code Online (Sandbox Code Playgroud)

HTML代码(使用 Slim):

# app/views/payments/new.html.slim

= content_tag :div, nil, data: { \
    controller: 'stripe',
    stripe_public_key: ENV['STRIPE_PUBLIC_KEY'],
    stripe_session_id: @session.id } …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails stripe-payments

5
推荐指数
1
解决办法
2758
查看次数

了解Time#utc?

据我了解,UTC表示时间为时区+00:00。但是Ruby认为有所不同Time#utc?。我在Ruby 2.5.1中观察到了这一点:

a = Time.new(2018,6,13, 9,0,0, '+00:00')
# => 2018-06-13 09:00:00 +0000 

b = Time.utc(2018,6,13, 9,0,0)
# => 2018-06-13 09:00:00 UTC 

a == b 
# => true

a.utc? 
# => false (WHY???)

b.utc?
# => true
Run Code Online (Sandbox Code Playgroud)

恕我直言,a.utc?应返回true。有什么解释吗?

另外:来自Time#utc 的Ruby文档

如果时间表示以UTC(GMT)表示的时间,则返回true 。

“在UTC / GMT中表示时间”到底是什么意思?显然,偏移量0是不够的。

ruby time utc

4
推荐指数
1
解决办法
91
查看次数

Rails:管理已读/未读消息

对于类似论坛的应用程序,我需要能够向每个用户显示未读(新)消息.是否有任何Rails插件/ gem用于此目的?

或者:有没有任何提示以有效的方式完成这项工作?我正在考虑一个额外的数据库表,为每个用户存储每条消息的未读状态(或读状态?).但这似乎是蛮力的方法,也许有一个更聪明的解决方案......

祝愿乔治

ruby-on-rails ruby-on-rails-plugins

2
推荐指数
2
解决办法
5045
查看次数