小编Syl*_*Syl的帖子

Paperclip创建具有不正确权限的文件夹

rails 3.0 app使用apache/passenger在ubuntu服务器上.部署应用程序的用户是admin,它也是运行应用程序的用户(没有选择名称,admin没有root权限).我今天再次更新了回形针.

回形针插件用于上传图像.它正确上传图像,但它创建的文件夹使用的权限是没有人可以读取的:drwxr-x --- 4 admin admin

正如你所看到的那样,"别人"没有权利,但似乎apache尝试用www-admin读取文件.

admin用户的umask是022,为什么paperclip会创建没有其他权限的文件夹?

我怎么能改变它?

编辑:我检查过,乘客和铁路进程都归管理员所有.

permissions ruby-on-rails paperclip

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

租户共享数据的多租户

我目前正在制作一个将订阅作为多租户应用程序销售的webapp.我正在使用的技术是rails.

但是,它不仅仅是使用当前应用程序的孤立租户.

每个租户都会创建产品并将其发布到应用程序的个人实例上.每个租户都拥有自己的用户群.

有问题的规范是租户可以将其产品分享给其他租户,因此他们可以转售.

说明:

FruitShop出售苹果橙和西红柿.
VegetableShop出售萝卜和胡椒铃.

Fruitshop与其他商店分享西红柿.

VegetableShop决定从可用的共享项目列表中获取番茄并将其添加到其库存中.

现在,浏览蔬菜店的客户将看到萝卜,胡椒铃和西红柿.

你可以猜到,一个select products where tenant_id='vegetableshop_ID'不行.

我正想着做多与某种一对多的关系的tenant_to_product表,将有tenant_id,product_id,price_id甚至发布开始,结束日期.产品将是"半租户表",其中租户ID由tenant_creator_id替换,以了解谁是原始所有者.

对我来说这似乎很麻烦,添加它意味着复杂的查询,即使是只出售自己的产品的商店.获得销售的产品会很复杂:

select tenant_to_products.* 
where tenant_to_products.tenant_ID='current tenant' 
AND (tenant_to_products.product match publication constraints) 

for each tenant_to_product do
   # it will trigger a lot of DB call
   Display tenant_to_product.product with tenant_to_product.price
Run Code Online (Sandbox Code Playgroud)

取消共享产品也意味着修改引用原始产品的所有tenant_to_products的复杂更新.

我不确定像这样实施这个约束是个好主意,你建议我做什么?我打算做一些愚蠢的事情还是一个不太糟糕的想法?

multi-tenant data-sharing

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

Guard-rspec和ember不能很好地协同工作

Rails 4.2.7 guard-rspec 4.7.3

由于我安装了ember-cli-rails,因此ember应用程序会阻止guard-spec运行并触发数百个错误.这是一个错误:

Directory: /home/sylvain/dev/placedemarche/marketadmin/tmp/broccoli_merge_trees-output_path-rlX3b4rm.tmp/marketadmin/tests/unit

    is already being watched through: /home/sylvain/dev/placedemarche/marketadmin/tmp/broccoli_persistent_filterbabel__babel_marketadmin-output_path-Nv8C3Z67.tmp/marketadmin/tests/unit

    MORE INFO: https://github.com/guard/listen/wiki/Duplicate-directory-errors
    ** ERROR: directory is already being watched! **
Run Code Online (Sandbox Code Playgroud)

我在guardfile中尝试了多个东西,甚至删除了所有的手表:

guard 'rspec',:cli => "--drb --format progress",all_after_pass: false do
  # ignore /marketadmin/ 
  # watch(%r{^spec/(.+)_spec\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
  # watch(%r{^lib/(.+)\.rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }
  # watch('spec/spec_helper.rb')  { "spec" }

  # # Rails example
  # watch(%r{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
  # watch(%r{^app/(.*)(\.erb|\.haml)$})                 { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
  # watch(%r{^app/controllers/(.+)_(controller)\.rb$})  { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
  # watch(%r{^spec/support/(.+)\.rb$})                  { …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails guard

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

当您的页面上已经存在tinymce实例时,动态添加一个tinymce编辑器

这是我已经问过的这个问题的后续内容:动态添加一个tinymce编辑器

我有一个包含编辑器的页面(tinyMCE).我动态添加textarea(添加条目按钮).它工作正常,期望它撤消我对其他TinyMCE所做的所有改变.如果我加载了一个显示"Something 40"的tinyMCE的页面,我输入了"Something 40 and some stuff",然后我点击添加一个条目,出现一个新的tinymce,但第一个现在显示"Something 40".

我使用以下代码:

<script type="text/javascript">
//<![CDATA[
tinyMCE.init({"selector":"textarea.tinymce","theme_advanced_toolbar_location":"top","theme_advanced_toolbar_align":"left","theme_advanced_statusbar_location":"bottom","theme_advanced_buttons3_add":"tablecontrols,fullscreen","toolbar":"insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image","plugins":"paste,table,fullscreen,image,code,link","dialog_type":"modal","content_css":"/assets/application.css"});
//]]>
</script>
<script>
function loadTinyMCEEditor() {
tinyMCE.init({"selector":"textarea.tinymce","theme_advanced_toolbar_location":"top","theme_advanced_toolbar_align":"left","theme_advanced_statusbar_location":"bottom","theme_advanced_buttons3_add":"tablecontrols,fullscreen","toolbar":"insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image","plugins":"paste,table,fullscreen,image,code,link","dialog_type":"modal","content_css":"/assets/application.css"});
}
</script>
Run Code Online (Sandbox Code Playgroud)

两者都是添加一个小MCE的相同选项,第一个是我希望在页面显示时显示为编辑器的textarea,第二个是在我动态添加textarea时调用的函数.

这是我如何将tinyMCE添加到nex textarea:

$(document).on 'nested:fieldAdded', (event) ->
  loadTinyMCEEditor()
  #alert "azeaze"+event.field.attr("id")
  #alert "totoooot "+event.field.find('textarea').attr("id")
  tinyMCE.execCommand "mceAddControl", true, event.field.find('textarea').attr("id") …
Run Code Online (Sandbox Code Playgroud)

tinymce dynamic

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

在rails应用程序中缓存对外部API的调用

rails app(4)使用HTTParty调用外部API.API是只读的.需要缓存,因为数据不会经常更改(24小时),并且API每小时只允许有限数量的呼叫.

我想我需要某种基于散列的缓存,我将使用"params/sent/to/the/api"作为密钥.用于缓存的Rails工具似乎只适用于页面,片段或SQL.

我该怎么做才能缓存对外部API的调用?

api caching ruby-on-rails

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

如何让rails引擎与主App交互

我正在创建一个用作支付服务接口的rails引擎.我必须处理支付服务在任何交易之外向我发送消息的用例.我将采用以下用例:

引擎收到一条消息,说明订阅FooBar42已正确计费(通过它自己的路由).我的引擎下一步做什么?如果我开始调用特定于我的应用程序的模型,我的引擎只适用于此应用程序.只有我能找到的例子是Devise,但在设计中,它只是为您的用户模型添加方法,引擎处理用户的存储方式和所有代码.

如何创建可重用的系统,我的引擎可以在主应用程序中调用/触发代码?

我是否覆盖发动机控制器?我是否使用空方法生成服务对象,将其用作引擎应用程序通信系统?

gem ruby-on-rails

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

使用 Rspec 测试 Turbo 流操作

我正在对使用涡轮流的控制器操作进行 rspec 测试:

  describe 'GET /CONTROLLER_NAME' do

    it 'return a turbo stream answer' do
      get :index, as: :turbo_stream
      expect(response).to eq Mime[:turbo_stream]
    end
  end

end

Run Code Online (Sandbox Code Playgroud)
Failure/Error: expect(response).to eq Mime[:turbo_stream]

       expected: #<Mime::Type:0x00007f7d9c2e1ff0 @synonyms=[], @symbol=:turbo_stream, @string="text/vnd.turbo-stream.html", @hash=2866392594387537360>
            got: #<ActionDispatch::TestResponse:0x00007f7d976945f8 @mon_data=#<Monitor:0x00007f7d97694580>, @mon_data_...oller::TestRequest GET "http://test.host/CONTROLLER_NAME.turbo_stream" for 0.0.0.0>>
Run Code Online (Sandbox Code Playgroud)

如何在控制器测试中使用 Turbo Stream 进行获取查询?

rspec ruby-on-rails turbo

3
推荐指数
1
解决办法
2265
查看次数

在rails 3中,如何在link_to中显示文本和图像?

我想要一个包含文字和图像的链接.在rails 3之前互联网告诉我你必须这样做:

<%= link_to "my text"+image_tag("image.jpg"), {:controller=>:billets}, :class => 'link_to_blog'%>
Run Code Online (Sandbox Code Playgroud)

但是在rails 3中,我在我的网页中显示了图像的代码而不是图像.现在看来,它逃脱了html代码.

如何在rails 3中使用text和image进行link_to?

ruby-on-rails hyperlink link-to

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

我应该从模型回调或控制器发送邮件吗?

我有一个模型,当它处于特定状态时,需要一些额外的数据,然后发送邮件.

为此,我有一个前验证回调说

"我处于这种需要数据的状态,我需要更多数据吗?不是吗?那么我将改变我的状态并发送邮件".

这种状态是每晚由cron rake触发的,有时候不需要数据,所以它应该尽快发送邮件.稍后收集数据时,将触发回调并且邮件将继续运行.

我已阅读并被告知邮件应仅从控制器发送.但这里的意思是我需要在我的控制器和我的耙子中发送邮件.

为什么从回调中发送邮件"不好"?

从一个地方开始将邮件发送到两个不同的地方不是一个坏主意吗?

model-view-controller ruby-on-rails callback

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

菜单显示在所有页面上,代码在所有控制器中复制

我有一个收藏模型.我成功创建了一个_collection.html.erb<%= render @collections%>在应用程序布局中调用的东西.

我的问题是,在我所有的控制器方法中,我必须添加 @collections = Collection.all

我发现它非常非常难看,它会让我的收藏范围变得很难改变,而且我确信我错过了一些更好的东西.

有没有办法让模型数据生成部分布局,而AAAALLLLLL控制器中没有相同的代码片段?

controller ruby-on-rails view

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

如何在rails上的ruby中创建删除表的迁移

我想在我的rails应用程序中删除一个表,但我不能使用回滚,因为我很久以前创建了这个表,并且我有很多其他表创建以来.

如何将其命名为drop table迁移文件,是否有办法使用rails generate生成它?

ruby-on-rails sql-drop

0
推荐指数
1
解决办法
2151
查看次数

无法将负载"部署/资产"添加到我的capistrano部署中

当我尝试使用命令部署我的rails应用程序时cap deploy它失败:

./config/deploy.rb:31:in'load':没有要加载的文件 - deploy/assets(LoadError)

这是由于 load 'deploy/assets'
我的capistrano deployment.rb文件中的行.该行应该在部署期间触发资产预编译.

据捆绑秀我正在使用:

  • 捆绑(1.1.4)
  • 卡皮斯特拉诺(2.12.0)
  • 铁轨(3.1.3)

为什么不工作?

capistrano ruby-on-rails asset-pipeline

0
推荐指数
1
解决办法
3931
查看次数

选择没有名为foobar的帖子的用户

我有一张桌子user和一张桌子post.它是一个N-1关系,意味着关系是通过完成的post.user_id.

我想找到没有帖子名为"foobar"的用户.我试过这个:

SELECT `users`.* FROM `users` 
INNER JOIN `posts` ON `posts`.`user_id` = `users`.`id`
WHERE post.title !="foobar"
Run Code Online (Sandbox Code Playgroud)

如果一个用户有一个名为foobar的帖子,则不会返回,但只要有一个名为foobar的帖子,就会返回该用户.

在SQL中我怎么说"我希望没有一个名为foobar的帖子的用户".

mysql sql join

0
推荐指数
1
解决办法
59
查看次数