标签: sinatra

我应该在这个网站应用程序中使用Rails或Ruby吗?怎么样?

我对网络编程很新(或者实际上,它已经很老了,因为我上次与网络混乱是HTML 1.1),但现在需要快速部署Web应用程序.似乎每次我转身时,都会有新的首字母缩略词和技术需要学习(JSON,XMLRPC,GWT,Javascript,Rails等).

这是我的应用必须做的事情:

  1. 给定用户名和密码,进行身份验证(很简单,一切都是这样,显然).
  2. 允许用户上传大量数据以进行处理.
  3. 处理该数据.
  4. 允许用户下载其处理的数据.

我已经有了Java脚本和数据库来处理数据.在一台机器上,我可以运行一系列命令行程序来处理传入的数据块并将结果放回到mysql数据库中.那已经存在并且有效.

我想使用这些现有和经过测试的方法构建此任务的Web前端.我现在倾向于这种方法:

  1. 有两台机器,一台数据库机器和一台Web服务器.如果需要,该方法允许以后的可伸缩性,但也要求我不能假设我用来访问数据并操纵它的程序是本地存储的.
  2. 使用Ruby DRb应用程序创建服务器和客户端.客户端会将数据传递给服务器,服务器又会调用这些应用程序.
  3. 使用其他一些Ruby接口与Web前端的DRb进行交互.

这是我的问题:看起来大多数用于Web的Ruby应用程序都会自动尝试构建某种本地数据库.我发现的所有Rails教程都是从创建自己的数据库并与之交互开始的,这正是我不想做的事情.

Rails是适合我的技术,还是使用Ruby DRb?我应该探索一些其他技术吗?

如果Rails或Ruby是正确的东西,我应该看什么?我已经有了编程Ruby书,并且已经将它用于一些后端内容以及使基本的DRb工作.

ruby ruby-on-rails drb sinatra

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

Rails还是Sinatra?哪个开始学习PHP程序员好?

我用PHP工作太久了,对它感到厌烦.我也想学习一门新语言.

我一直在使用Ruby并喜欢它.我必须在Rails和Sinatra之间做出决定,你会推荐哪一个?是不是Sinatra不能用于构建复杂的应用程序,它只适用于简单的应用程序?

ruby ruby-on-rails sinatra

6
推荐指数
3
解决办法
5814
查看次数

用Sinatra学习和"演唱"Ruby

您好,我正在尝试通过阅读Ruby编程语言书来提高我的ruby知识.在工作中阅读编码器我看到很多受访者建议深入研究项目源代码

  • 学习最佳实践
  • 要注意坏习惯
  • 当然还要为如何做事带来新的灵感.

我决定选择一个项目,因为我能找到更多自给自足.我的选择是Sinatra,因为它是1000 LOC.

这是一个很好的学习项目吗?你是否建议另一个更简单(即更少的LOC)?

我之前曾试图看过铁路机械,但我从它出来吓坏了.

ruby sinatra

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

是否可以在Sinatra中重写基本URL?

是否可以重写基本URL?

例如,而不是www.host.com/使用www.host.com/blah/作为基础URL等:

get '/' do
  ...
end
Run Code Online (Sandbox Code Playgroud)

会工作的 www.host.com/blah/

我可以附加到我的所有路线,'/blah/..'但任何宝石等都无法正常工作.

这可以在Rails中轻松完成,我也想在Sinatra中使用它.

ruby url rack base sinatra

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

薄和sinatra - 如何停止/重新启动?没瘦.pid

我正在使用thin作为我的Sinatra应用程序的服务器.它开始如此:

thin -C config/environment.yml -R config/config.ru start
Run Code Online (Sandbox Code Playgroud)

environment.yml瘦东西在哪里,config.ru你可以在一个rackup文件中找到一般的东西.

我希望能够守护进程(使用瘦配置文件很容易)并像使用apache/tomcat/etc一样停止并重新启动.

当我尝试thin stop或重启或其他各种事情时,我得到:

Can't stop process, no PID found in tmp/pids/thin.pid

实际上,没有这样的文件.我已经尝试/tmp/thin.pid在瘦配置yml中为各种不同的地方指定一个pid文件和​​位置(例如,很容易).所有这一切都是更改"no PID found in"消息中目录的位置,仍然没有创建pid文件.

有任何想法吗?

thin sinatra

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

如何使用Rack Middleware代理AJAX请求?

我正在开发一个Rails应用程序,它使用API​​后端来处理用Sinatra编写的AJAX请求.

API与Rails分开运行:

Rails: localhost:3000
API: localhost:9393

在生产中,我们将使用nginx代理对API的请求.

问题是我们在开发模式下没有nginx,我们使用的是瘦身.所以我需要某种Rack中间件,我可以在开发模式中添加它来代理我的请求.

有人能给我一个如何做到这一点的例子吗?

ajax reverse-proxy ruby-on-rails sinatra ruby-on-rails-3

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

如何在Sinatra代码中发出POST请求?

单击表单中的按钮将发送POST请求以由以下代码处理.

post '/register' do
   #send post request to http://www.randomsite.com
   #parse response
   #do something with it
   @user = User.first(:name => params['regUsername'])
   if @user == nil
     @user = User.create(
     :name         => params['regUsername'],
     :pass         => Password.create(params['regPassword']),
     :email        => params['regEmail'],
     :created_date => Time.now
     )
     redirect '/'
   else
     "User already exists."
   end
end
Run Code Online (Sandbox Code Playgroud)

如何从Ruby代码中向另一个网站发送另一个POST请求?

ruby sinatra

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

在Sinatra中使用多个公共目录

我的sinatra应用程序包含在gem中.这意味着资产(css/js)存在于gem中.该应用程序动态写入生成的图像并为其提供服务; 目前正在写入公共目录并为其提供服务.

我更喜欢不在gem目录中编写生成的图像,而是在实现此gem的web应用程序下编写某些类型的"缓存"目录.

Gem安装在/var/www/TE/shared/gems/ruby/1.8/gems/tubemp-0.6.0,所以资产是在例如/var/www/TE/shared/gems/ruby/1.8/gems/tubemp-0.6.0/lib/public/css/.

Gem部署在一个简单的机架应用程序中/var/www/TE/current/,所以我更愿意编写和提供缩略图/var/www/TE/current/public.

但是,自定义public-dir的设置只允许设置一个目录:

set :public_folder, File.join(Dir.pwd, "public")
Run Code Online (Sandbox Code Playgroud)

打破资产服务; Dir.pwd是Rack应用程序的目录.公共现在是Rack-app下的目录,但这不是资产所在的地方:它们生活在宝石中的"公共"之下.

set :public_folder, File.join(gemdir, "public")
Run Code Online (Sandbox Code Playgroud)

中断生成的缩略图的服务.

我可以重写应用程序,因此它通过Sinatra服务资产或缩略图,但这似乎是一些开销.

这是唯一的方法吗?或者有没有办法让Sinatra有两个或更多公共目的地来提供静态物品

assets public sinatra

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

使用Ruby/Puma的本地SSL

我正在运行本地puma服务器,我无法在SSL下加载资源.

我有一个本地签名证书.

我正在尝试使用以下配置运行服务器:

puma -b 'ssl://127.0.0.1:9292?key=/path/to/certs/localhost.unecrypted.key&cert=/path/to/certs/localhost.crt'
Run Code Online (Sandbox Code Playgroud)

现在,当我访问https://localhost:9292https://127.0.0.1:9292浏览器只是旋转,并没有来自服务器的响应.没有资源返回.它曾两次向我展示HTML标题标签,但几乎总是我什么都没得到.

任何的想法?其他想法?真的需要在本地运行这个应用程序的https版本,我无法弄清楚如何做到这一点.

编辑:记录初始请求,但没有响应:

127.0.0.1 - - [04/Sep/2013 11:29:15] "GET / HTTP/1.1" 200 1265 0.0397
Run Code Online (Sandbox Code Playgroud)

有时候我会收到这个错误:

013-09-04 11:30:20 -0400: Read error: #<Errno::EPIPE: Broken pipe>
/Users/wesbos/.rvm/gems/ruby-1.9.3-p429@sinatra/gems/puma-2.3.2/lib/puma/minissl.rb:56:in `write'
/Users/wesbos/.rvm/gems/ruby-1.9.3-p429@sinatra/gems/puma-2.3.2/lib/puma/minissl.rb:56:in `write'
/Users/wesbos/.rvm/gems/ruby-1.9.3-p429@sinatra/gems/puma-2.3.2/lib/puma/server.rb:635:in `fast_write'
/Users/wesbos/.rvm/gems/ruby-1.9.3-p429@sinatra/gems/puma-2.3.2/lib/puma/server.rb:484:in `handle_request'
/Users/wesbos/.rvm/gems/ruby-1.9.3-p429@sinatra/gems/puma-2.3.2/lib/puma/server.rb:248:in `process_client'
/Users/wesbos/.rvm/gems/ruby-1.9.3-p429@sinatra/gems/puma-2.3.2/lib/puma/server.rb:147:in `block in run'
/Users/wesbos/.rvm/gems/ruby-1.9.3-p429@sinatra/gems/puma-2.3.2/lib/puma/thread_pool.rb:92:in `call'
/Users/wesbos/.rvm/gems/ruby-1.9.3-p429@sinatra/gems/puma-2.3.2/lib/puma/thread_pool.rb:92:in `block in spawn_thread'
Run Code Online (Sandbox Code Playgroud)

ruby ssl https sinatra puma

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

NameError:未初始化的常量Rpush :: Gcm我正在尝试将rpush用于我的移动应用程序.但我一直收到这个错误

所以我试图使用rpush来使用这个gem的移动应用程序的推送通知:https://github.com/rpush/rpush.我正在使用sinatra框架.但我一直得到这个错误,即使我在我的文件顶部写了 - > require'rpush'.有人在红宝石中有经验可以帮助我吗?我是红宝石的新手所以请耐心等待.这是我的代码

require 'rpush'

Module Notifier

def rpush_client
app = Rpush::Gcm::App.new
app.name = "App-Name"
app.auth_key = "XXXXXXXXXXXXXXX"
app.connections = 1
app.save!
end


def notify(user_id,alert)
  rpush_client
  session = db_find_one('dbname.sessions',{user_id: user_id})
  if session.present?
    device = session['devices'].first
    token = device['device_token']
    n = Rpush::Gcm::Notification.new
    n.app = Rpush::Gcm::App.find_by_name("App-Name")
    n.registration_ids = ["token", token]
    n.data = { message: alert }
    n.save!

    Rpush.push
  end
end

end
Run Code Online (Sandbox Code Playgroud)

我知道这是一个愚蠢的问题,但厌倦了在这里寻找它.

gem notifications android push sinatra

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